父类禁用拷贝构造函数和赋值操作符

#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

posted @ 2015-09-21 19:11  JinleiZhang  阅读(388)  评论(0)    收藏  举报