class MyInt{
public:
MyInt() {//构造函数
std::cout << "1" << std::endl;
}
MyInt(int a) {//初始化对象时,同时实现赋一个int值
std::cout << "2" << std::endl;
}
void operator =(int a) {//利用运算符对一个已有对象赋值
std::cout << "3" << std::endl;
}
MyInt(MyInt const &b) {//拷贝构造函数
std::cout << "4" << std::endl;
}
};
int main(int argc, _TCHAR* argv[])
{
MyInt a;//利用构造函数生成对象
std::cout << "-------------" << std::endl;
MyInt b = 10;//b(10)完全相同, 利用重载的直接复制构造函数 std::cout << "-------------" << std::endl;
MyInt c;
std::cout << "-------------" << std::endl;
c = 10;//利用赋值运算符重载给对象c赋值
std::cout << "-------------" << std::endl;
MyInt d;
std::cout << "-------------" << std::endl;
MyInt e = d;//e=d与代码e(d)意思完全相同
return 0;
}
程序详细分析:
1,根据拷贝构造函数的定义,只有MyInt(MyInt const &b)是拷贝构造函数,拷贝构造函数的作用是用一个对象A生成另一个对象B,即对象B是对象A的拷贝。上面代码MyInt e = d;系统为类对象B分配了内存,并且完成了对象的d的复制过程。这种拷贝限于是类的对象,而且必须是同一个类。
参考:http://blog.csdn.net/lwbeyond/article/details/6202256
2,利用运算符重载赋值,参考:http://blog.csdn.net/squirrel_program/article/details/1809091
3,拷贝构造函数必须是const常量引用