亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

使用虛繼承之后無法將孫子類的參數(color)傳給爺爺類了,僅能使用默認構造函數的初始化值,如何解決?

virtual減少了調用次數,但也讓值不能傳遞,如何解決

正在回答

2 回答

virtual 確實阻止了參數的傳遞。

但是你回到封裝的思想,一般都并不是在構造函數里面完成參數的傳遞,

而是通過 getter()、setter()函數,因此在第一層的父類Person中定義public的getter、setter函數即可,我試過了,孫子類可以直接跳過virtual定義的中間類,調用爺爺Person的getter、setter函數

1 回復 有任何疑惑可以回復我~
//如果不用默認值,需要從子類的構造函數的初始化列表中傳給父類相應的參數,如下:
#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();
}


2 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
C++遠征之繼承篇
  • 參與學習       75192    人
  • 解答問題       251    個

繼承,C++面向對象三大特征之一,通過編碼實踐方式講解到操作層面

進入課程

使用虛繼承之后無法將孫子類的參數(color)傳給爺爺類了,僅能使用默認構造函數的初始化值,如何解決?

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號