今天碰到的一個問題,關於通過基類對象的引用給子類賦值

以下是在論壇上提出的問題:

關於通過基類對象的引用給子類賦值的問題:

比如說:

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);
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章