读书人

派生类调用拷贝构造函数如何保证基类中

发布时间: 2012-04-19 14:36:43 作者: rapoo

派生类调用拷贝构造函数怎么保证基类中成员数据一致呢
#include <iostream>
using namespace std;

class base
{

int i;
public:
base(int i) {this->i=i;cout<<"base::base(int i)"<<endl;}
base() {i=0;cout<<"base::base()"<<endl;}
base(const base& b) {cout<<"base::base(const base& b)"<<endl;}
virtual ~base(){}
void I()const {cout << "base::i="<<i<<endl;}
};
class derived : public base
{
public:
derived():base(3){cout<<"derived::derived()"<<endl;}
derived(const derived& d){cout<<"derived::derived(const derived& d)"<<endl;}
void I()const {cout << "derived::i=";base::I();}
~derived(){}
};
void main()
{
derived* d2 = new derived;
derived d3 = *d2; //**********调用拷贝构造函数,同时调用基类缺省构造函数
d2->I();
d3.I(); //*******d2和d3输出的i值并不一样。
delete d2;
}

[解决办法]
base(const base& b):i(b.i) {cout<<"base::base(const base& b)"<<endl;}
derived(const derived& d):base(d){cout<<"derived::derived(const derived& d)"<<endl;}

读书人网 >C++

热点推荐