#if __cplusplus >= 201103L
#include <cstdint>
#else
#include <stdint.h>
#endif
#include <cstring>
#include <iostream>
class Array
{
int32_t *array_;
uint32_t size_;
friend std::ostream & operator << (std::ostream &os, Array const& obj);
public:
Array(uint32_t n = 0)
: array_(new int32_t[n])
, size_(n)
{
std::cout << "Array(int)" << std::endl;
}
Array(Array const& r)//拷贝构造函数
: size_(r.size_)
, array_(new int32_t[size_])
{
if(array_)
memcpy(array_, r.array_, size_ * sizeof(int32_t));
std::cout << "Array(Array const&)" << std::endl;
}
Array& operator=(Array const& r)//赋值运算符
{
if(this == &r)
return *this;
if(array_)
delete []array_;
size_ = r.size_;
array_ = new int32_t[size_];
if(array_)
memcpy(array_, r.array_, size_ * sizeof(int32_t));
std::cout << "operator=(Array const&)" << std::endl;
return *this;
}
#if __cplusplus >= 201103L
Array(Array && r)
: array_(r.array_)
, size_(r.size_)
{
r.array_ = nullptr;
r.size_ = 0;
std::cout << "Array(Array &&)" << std::endl;
}
Array& operator=(Array && r)
{
if(this == &r)
return *this;
if(array_)
delete []array_;
array_ = r.array_;
size_ = r.size_;
r.array_ = nullptr;
r.size_ = 0;
std::cout << "operator=(Array &&)" << std::endl;
return *this;
}
#endif
~Array()//析构函数
{
delete []array_;
std::cout << " ~Array()" << std::endl;
}
uint32_t size() const { return size_; }
bool setValue(uint32_t index, int32_t value)
{
if(index >= size_)
return false;
array_[index] = value;
return true;
}
bool getValue(uint32_t index, int32_t& value) const
{
if(index >= size_)
return false;
value = array_[index];
return true;
}
};
std::ostream & operator << (std::ostream &os, Array const& obj)
{
for(uint32_t i = 0; i < obj.size_; i++)
os << obj.array_[i] << " ";
if(obj.size_ == 0)
os << "empty";
os << std::endl;
return os;
}
int main(int argc, char *argv[])
{
Array array1(5);
for(uint32_t i = 0; i < array1.size(); i++)
array1.setValue(i, i + 1);
Array array2 = array1; //拷贝构造函数
Array array3;
array2.setValue(3, 10);
array3 = array2;//赋值运算符
array3.setValue(5, 10);
std::cout << "array1: " << array1
<< "array2: " << array2
<< "array3: " << array3;
#if __cplusplus >= 201103L
Array array4 = std::move(array3);
Array array5;
array5 = std::move(array2);
std::cout << "array4: " << array4
<< "array5: " << array5
<< "array3: " << array3
<< "array2: " << array2;
#endif
std::cout << "c++ version: " << __cplusplus <<std::endl;
return 0;
}

flysnow010
- 粉丝: 4340
最新资源
- 该项目为一个集数据抓取与展示一体的ACM队员数据系统,基于Django、python实现。.zip
- 辅助背单词软件,基于艾宾浩斯记忆曲线(其实背啥都行)的Python重构版,增加在线查词与翻译等功能.zip
- 基于C开发的命令行输入输出流重定向与实时分析工具_支持快捷按键和文本框输入实时过滤计算分析多格式结果呈现文本提示弹窗曲线表格支持批量测试和日志抓取_用于开发调试协议分.zip
- 各种有用的web api 基于Golang, Python(tornado django scrapy gevent).zip
- 华南理工大学找到卷王,基于 Python 的综测系统数据爬虫.zip
- 湖南大学(HNU)数据库系统课程大作业 ATM系统 前端基于Python的PyQt5,后端基于MySQL.zip
- (新闻爬虫),基于python+Flask+Echarts,实现首页与更多新闻页面爬取
- 基于 Flask + Requests 的全平台音乐接口 Python 版.zip
- 基于 FFmpeg ,使用 Python 开发的批量媒体文件格式转换器。.zip
- 基于 CAI 的 OneBot Python 实现.zip
- 基于 nonebot2 开发的消息交互式 Python 解释器,依赖 docker SDK.zip
- 基于 Python 3 + Django 2 开发的用于适配手机的简单 Jenkins 构建平台.zip
- Python 语言的爬楼梯问题实现-计算爬到第 n 级台阶的方法数
- 基于 Napcat, NcatBot, JMComic-Crawler-Python 的 QQ 机器人。.zip
- 基于 Python Tornado 的博客程序 (练习).zip
- 基于 Python 3.5 + Django 2.0 开发的简单个人博客.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈


