以下是在論壇上提出的問題:
關於通過基類對象的引用給子類賦值的問題:
比如說:
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);
}