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

关于虚继承的参数传递问题

https://img1.sycdn.imooc.com//5b79583a0001643a10420611.jpg

https://img1.sycdn.imooc.com//5b79583b000127d005800258.jpg

https://img1.sycdn.imooc.com//5b79583b00015ee607950269.jpg

https://img1.sycdn.imooc.com//5b79583c000135d906330257.jpg

person是基类,worker普通公共继承person,farmer虚公共继承person。p->farmer::printinfo()我能理解是参数传递不到基类,p->worker::printinfo()能够传递过去。

那既然woker的传递过去了,p->person::printinfo()为什么又是没传递过去?

正在回答

3 回答

因为 你的Worker和Farmer的构造函数的实现是自定义的(),并没有像初始化列表那样调用了Person的构造函数,https://img1.sycdn.imooc.com//5c2c10f8000177e003480400.jpgPerson的成员函数自然不会修改

3 回复 有任何疑惑可以回复我~

https://img1.sycdn.imooc.com//5bd43e1b0001d31008650500.jpg你是不是哪里弄错了?

0 回复 有任何疑惑可以回复我~

我照你说的一个普通继承一个虚继承试了一下,发现Person::printInfo()是报错的,这个函数有二义性而无法执行,你看看是不是哪写错了。


0 回复 有任何疑惑可以回复我~
#1

朔风m 提问者

我编译没有出现问题呀? #include <iostream> #include <string> using namespace std; class Person { public: Person(string color = "blue") { m_strColor = color; } void printColor() { cout << "Person::printColor()" << endl; cout << m_strColor << endl; } protected: string m_strColor; };
2018-08-21 回复 有任何疑惑可以回复我~
#2

朔风m 提问者 回复 朔风m 提问者

class Worker : public Person { public: Worker(string code = "001", string color = "blue") { m_strColor = color; } protected: string m_strCode; }; class Farmer :virtual public Person { public: Farmer(string name = "Jack", string color = "blue"){} protected: string m_strName; };
2018-08-21 回复 有任何疑惑可以回复我~
#3

朔风m 提问者 回复 朔风m 提问者

class MigrantWorker :public Farmer, public Worker { public: MigrantWorker(string name, string code, string color) : Farmer(name, color), Worker(code, color) {} };
2018-08-21 回复 有任何疑惑可以回复我~
#4

朔风m 提问者 回复 朔风m 提问者

int main(void) { MigrantWorker *p = new MigrantWorker("Merry", "200", "yellow"); p->Farmer::printColor(); p->Worker::printColor(); p->Person::printColor(); delete p; p = NULL; return 0; }
2018-08-21 回复 有任何疑惑可以回复我~
#5

慕前端8475193 回复 朔风m 提问者

你一个时虚继承一个不是虚继承呀。所以,farmer可以传递参数给基类了。
2018-11-17 回复 有任何疑惑可以回复我~
查看2条回复

举报

0/150
提交
取消
C++远征之继承篇
  • 参与学习       75222    人
  • 解答问题       249    个

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

进入课程

关于虚继承的参数传递问题

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