知识点:
1、当且仅当没有定义构造函数,编译器才会提供默认的构造函数;
2、如果自己定义了构造函数,必须显式地提供默认构造函数;
3、当使用类和结构体时,必须注意提供复制(也叫拷贝)构造函数和赋值函数;
4、复制构造函数的作用是创建新的对象,赋值函数的作用是用对象给已经存在的对象赋值;
5、注意等号“=”不一定就调用赋值函数,有可能是调用复制构造函数。
6、“=”是有对象返回的,可以实现连续等。
#include<iostream>
using namespace std;
class test
{
public:
test(); //显式提供,默认构造函数
test(const test &); //复制构造函数
test & operator = (const test &); //赋值函数
};
test::test()
{
cout << "默认构造函数" << endl;
}
test::test(const test & arg)
{
cout << "复制构造函数" << endl;
}
test & test::operator = (const test & arg)
{
cout << "赋值函数" << endl;
//*this=arg; 注意有趣的一点,此处形成了递归调用,因为用了“=”
return *this;
}
int main()
{
test a;
test b(a);
test c = a; //注意,这里仍然是使用复制构造函数
a = c; //使用赋值函数
system("pause");
return 0;
}