課程
/后端開發
/C++
/C++遠征之繼承篇
virtual減少了調用次數,但也讓值不能傳遞,如何解決
2019-10-02
源自:C++遠征之繼承篇 6-3
正在回答
virtual 確實阻止了參數的傳遞。
但是你回到封裝的思想,一般都并不是在構造函數里面完成參數的傳遞,
而是通過 getter()、setter()函數,因此在第一層的父類Person中定義public的getter、setter函數即可,我試過了,孫子類可以直接跳過virtual定義的中間類,調用爺爺Person的getter、setter函數
//如果不用默認值,需要從子類的構造函數的初始化列表中傳給父類相應的參數,如下: #include?<iostream> #include?<string> using?namespace?std; class?Persion { public:???? ????Persion(string?color?/*=?"red"*/):m_strColor(color){} ????void?play(){cout<<m_strColor<<endl;} protected: ????string?m_strColor; }; class?Worker:virtual?public?Persion { public: ????Worker(int?salary,?string?color?=?"yellow"):Persion(color),m_iSalary(salary){} protected: ????int?m_iSalary; }; class?Children:virtual?public?Persion { public: ????Children(int?age,string?color?=?"green"):Persion(color),m_iAge(age){} protected: ????int?m_iAge; }; class?ChildLabourer:public?Worker,public?Children { public: ChildLabourer(int?age,?int?salary,?string?color): ????????Worker(salary,color),Children(age,color),Persion(color) ????????{ ????????} }; int?main()? { ????ChildLabourer?cl(10,1000,"black"); ????cl.play(); ????cl.Worker::play(); ????cl.Children::play(); ????cl.Worker::Persion::play(); ????cl.Children::Persion::play(); ????cl.Persion::play(); }
舉報
繼承,C++面向對象三大特征之一,通過編碼實踐方式講解到操作層面
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2020-05-27
virtual 確實阻止了參數的傳遞。
但是你回到封裝的思想,一般都并不是在構造函數里面完成參數的傳遞,
而是通過 getter()、setter()函數,因此在第一層的父類Person中定義public的getter、setter函數即可,我試過了,孫子類可以直接跳過virtual定義的中間類,調用爺爺Person的getter、setter函數
2019-10-16