最贊回答 / pand0rao
不同繼承方式的影響主要體現在:1、派生類成員對基類成員的訪問控制。2、派生類對象對基類成員的訪問控制。三種繼承方式:1、公有繼承(public)① 基類的public和protected成員的訪問屬性在派生類中保持不變,但基類的private成員不可訪問。② 派生類中的成員函數可以直接訪問基類中的public和protected成員,但不能訪問基類的private成員。③ 通過派生類的對象只能訪問基類的public成員。2、私有繼承(private)① 基類的public和protected成員都以pri...
2019-08-22
已采納回答 / AlexPan0610
編譯器給出的提示是ChildLabourer類沒有m_strName和m_iAge成員變量。推測是子類的初始化列表先于父類的構造函數執行,否則無法將參數傳遞給父類。因此在執行ChildLabourer的初始化列表時,父類(Worker, Children)的構造方法尚未執行,當然成員變量(m_strName, m_iAge)也就不存在,因此不能在子類的初始化列表中初始化父類的成員變量。
2019-08-05
最贊回答 / 莫渡
這是因為Worker和Children類中都有從person類繼承的eat,ChildLabourer不知道自己調用的是哪個父類的eat函數。要解決這個問題,就要用到虛繼承,就是把class Worker : public Person和class Children : public Person改成class Worker : virtual public Person和class Children : virtual public Person。具體你可以看這一章的課程。
2019-06-15
老師說的很好,贊贊贊https://blog.csdn.net/zaishuiyifangxym/article/details/88680380這是我做的筆記 和源代碼 互相學習 共同進步
最贊回答 / qq_慕仔4162485
這種調用是在父類person和子類soldier中含有同名成員函數或者數據成員時用來區分的。如果直接寫soldier.work()調用的是soldier中的work函數,而從父類繼承來的work函數會被隱藏。若想調用父類繼承來的work函數,在調用時要加上父類名Person
2019-02-15