派生类调用拷贝构造函数怎么保证基类中成员数据一致呢
#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;}