可以做文档赚钱的网站,中国建设银行大学助学贷款网站,加速乐 wordpress,12个 网站模板 管理复制对象时勿忘其每一个成分 我们都知道#xff0c;我们不主动写拷贝构造函数或者赋值重载运算符#xff0c;那么编译器就会自动生成默认的函数。当我们写时#xff0c;编译器不会自动生成#xff0c;它只会找对应我们写的函数#xff0c;如果此时我们写的函数出现了问题我们不主动写拷贝构造函数或者赋值重载运算符那么编译器就会自动生成默认的函数。当我们写时编译器不会自动生成它只会找对应我们写的函数如果此时我们写的函数出现了问题那编译器可不会处理。 比如说我们自行写了赋值重载运算符。而且我们在这个类里新增了一个成员变量但是没有及时修改我们写的运算符那么程序可能会出现错误。 再比如说 class A
{
public:A(const A aa) :a(aa.a), sa(aa.sa){}A operator(const A aa){this-a aa.a;this-sa aa.sa;return *this;}int a;string sa;
};
class B :public A
{
public:B(const B bb) :b(bb.b), sb(bb.sb){}B operator(const B bb){this-b bb.b;this-sb bb.sb;return *this;}int b;string sb;
}; 我们自行写了拷贝构造函数和赋值运算符。并且B类继承了A类。我们可以调用B的拷贝构造函数进行初始化对象但是实际上我们并没有初始化A类的成员只是因为我们自行写了对应的函数如果是编译器生成的默认函数那么会帮我们考虑到继承下来的A类的成员。 所以我们需要这样修改 class B :public A
{
public:B(const B bb) :b(bb.b), sb(bb.sb),A(bb){}B operator(const B bb){this-b bb.b;A::operator(bb);this-sb bb.sb;return *this;}int b;string sb;
};