为了账号安全,请及时绑定邮箱和手机立即绑定

使用虚继承之后无法将孙子类的参数(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++远征之继承篇
  • 参与学习       75203    人
  • 解答问题       249    个

继承,C++面向对象三大特征之一,通过编码实践方式讲解到操作层面

进入课程

使用虚继承之后无法将孙子类的参数(color)传给爷爷类了,仅能使用默认构造函数的初始化值,如何解决?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信