马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
第一个代码是测试类 TestVector类#include "iostream"
#include "MyVector.cpp"
using std::endl;
using std::cout;
using std::cin;
void main()
{
MyVector<int> mv1(10);
for (int i = 0; i < mv1.getLen(); i++)
{
mv1[i] = i + 1;
cout << mv1[i] << " ";
}
cout << endl;
MyVector<int> mv2 = mv1;
for (int i = 0; i < mv2.getLen(); i++)
{
cout << mv2[i] << " ";
}
cout << endl;
/*cout << mv2;*/
system("pause");
}
第二个代码是MyVector.h#pragma once
template <typename T>
class MyVector
{
private:
int m_len;
T* m_space;
public:
int getLen();
public:
T& operator[](int index);
public:
MyVector(int len);
/*MyVector(const MyVector& mv);*/
~MyVector();
};
第三个代码是MyVector.cpp#include "MyVector.h"
template <typename T>
int MyVector<T>::getLen()
{
return this->m_len;
}
template <typename T>
MyVector<T>::MyVector<T>(int len)
{
this->m_len = len;
this->m_space = new T[m_len];
}
template <typename T>
MyVector<T>::~MyVector<T>()
{
if (this->m_space != nullptr)
{
delete[] this->m_space;
this->m_space = nullptr;
this->m_len = 0;
}
}
template <typename T>
T& MyVector<T>::operator[](int index)
{
return this->m_space[index];
}
疑问 :为什么不写拷贝构造函数 能完成测试类中 MyVector<int> mv2 = mv1; 打印的结果跟打印mv1一样 执行数据复制了 可是我没写拷贝构造啊
C++中每个类一定有一个拷贝构造函数。它可以用来创建一个对象,并用另一个对象的数据初始百化新建对象。你度的代码中如果没有显示定义拷贝构造函数(用来实现你自己的一些特殊需求),则C++将为每个类隐式地提供一个缺省的拷贝构回造函数。缺省的拷贝构造函数简单地将参数对象的每个数据域复制给新建对象中相应的副本(注意如果数据域是一个指向其他对象的指针答,那么仅简单地复制指针保存的地址值,而不是复制对象的内容)
|