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

为什么讲Person定义为虚基类后eat()无法访问?

#include <iostream>
#include <stdlib.h>
#include <string>
using namespace std;

/**
* 定义人类: Person
*/
class Person
{
public:
	Person()
	{
		cout << "Person" << endl;
	}
	~Person()
	{
		cout << "~Person" << endl;
	}
	void eat()
	{
		cout << "eat" << endl;
	}

};

/**
* 定义工人类: Worker
* 虚继承人类
*/
class Worker : virtual Person
{
public:
	Worker(string name)
	{
		m_strName = name;
		cout << "Worker" << endl;
	}
	~Worker()
	{
		cout << "~Worker" << endl;
	}
	void work()
	{
		cout << m_strName << endl;
		cout << "work" << endl;
	}
protected:
	string m_strName;
};

/**
* 定义儿童类:Children
* 虚继承人类
*/
class Children : virtual Person
{
public:
	Children(int age)
	{
		m_iAge = age;
		cout << "Children" << endl;
	}
	~Children()
	{
		cout << "~Children" << endl;
	}
	void play()
	{
		cout << m_iAge << endl;
		cout << "play" << endl;
	}
protected:
	int m_iAge;
};

/**
* 定义童工类:ChildLabourer
* 公有继承工人类和儿童类
*/
class ChildLabourer :public Children,public Worker
{
public:
	ChildLabourer(string name, int age) :Worker(name),Children(age)
	{
		cout << "ChildLabourer" << endl;
	}

	~ChildLabourer()
	{
		cout << "~ChildLabourer" << endl;
	}
};

int main(void)
{
	// 用new关键字实例化童工类对象
	ChildLabourer *p = new ChildLabourer("Jason", 17);
		// 调用童工类对象各方法。
		p->eat();
	p->work();
	p->play();
	delete p;
	p = NULL;

	return 0;
}


正在回答

3 回答

1楼正解,具体就是virtual public Person这没有public

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

长安1223 提问者

非常感谢!
2016-07-03 回复 有任何疑惑可以回复我~

我和你错的一样

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

额额..忘写public标识符了,问题已解决

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

举报

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

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

进入课程

为什么讲Person定义为虚基类后eat()无法访问?

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号