父类禁用拷贝构造函数和赋值操作符
#include <iostream>
using namespace std;
/*
*@brief 测试父类禁用拷贝构造和赋值操作符后,子类的表现
* 赋值操作符,当父类禁用时,子类只要不调用父类的赋值函数,就不会报错,
* 赋值操作符不要求父类必须有. 但是子类对象间的赋值,将不能直接操作到父类的变量。
* 拷贝构造函数也是同样的道理,只要不指定调用父类的就不会报错,但是是部分复制。
*/
class Parent
{
public:
/*
Parent() : _member(0)
{}
*/
explicit Parent(int m=10) : _member(m)
{
cout<<"yes"<<endl;
}
public:
int getMember()
{
return _member;
}
private:
Parent(const Parent& r);
Parent& operator =(const Parent&);
int _member;
};
class Child : public Parent
{
public:
Child(int p, int m) : Parent(m), _plat(p)
{}
public:
int getPlat()
{
return _plat;
}
//Child(const Child& r) : Parent(r)
Child(const Child& r)
{
_plat = r._plat;
//_member = r.getMember();
cout<<"==="<<endl;
}
Child& operator =(Child& r)
{
//Parent::operator=(r);
this->_plat = r._plat;
return *this;
}
private:
int _plat;
};
int main()
{
Child a(1,2);
Child b(3,4);
Child c(5,6);
cout<<a.getMember()<<endl;
cout<<b.getMember()<<endl;
cout<<c.getMember()<<endl;
b = c;
cout<<b.getMember()<<endl;
cout<<b.getPlat()<<endl;
Child d(c);
cout<<d.getMember()<<endl;
cout<<d.getPlat()<<endl;
return 0;
}
输出结果:
yes
yes
yes
2
4
6
4
5
yes
===
10
5

浙公网安备 33010602011771号