以下是在论坛上提出的问题:
关于通过基类对象的引用给子类赋值的问题:
比如说:
class A
{
public:
A(int num):m_num(num){}
protected:
int m_num;
};
///
A zhy(123);
class B:public A
{
B(A &ZHY,m_name)
{
如何利用这个A对象的引用ZHY把B中从A类继承过来的m_num赋值?
}
private:
int m_name;
};
我知道父类变量的初始化靠父类的构造函数完成,即B(int i):A(i)
{
}
可是如果父类的参数有很多,那么继承了父类的子类的参数一般会更多,假如我创建了图书这么一个类,用它作父类派生出“已借出图书“这么一个类,它继承图书类的书名,作者等信息,自己新添加借出时间和应归还时间等信息,那么当我创建创建“已借出图书类”的对象的时候岂不是要把书的书名作者等基本信息再输入一遍?所以我想通过已经创建的图书类的对象,在构造函数中用它的引用把“已借出图书”对象中图书的基本信息一次都初始化,而除了图书类对象的引用,自己只需要初始化借出时间和应归还时间等信息,这样不是方便得多?
网友的解答:
这样增加拷贝构造函数
class A
{
public:
A(int num):m_num(num){}
A( const A& a ): m_num( a.m_num ){ } //增加的拷贝构造函数
protected:
int m_num;
};
///
A zhy(123);
class B:public A
{
public: //构造函数共有
B(A &ZHY, int m_name) //构造函数
: A(ZHY)
, m_name(m_name)
{
//如何利用这个A对象的引用ZHY把B中从A类继承过来的m_num赋值?
}
private:
int m_name;
};
//使用如下
void main()
{
A a(10);
B b( a,3);
}