C++多继承多重继承

多重继承:一个基类有一个派生类,这个派生类又有一个派生类

C++多继承多重继承_第1张图片

多继承:一个派生类有多个基类

C++多继承多重继承_第2张图片

下面我们看一个多重继承的例子

#include 
#include 
#include 
using namespace std;

/**
 * 定义人类: Person
 * 数据成员: m_strName
 * 成员函数: attack()
 */
class Person
{
public:
	Person(string name="jim")
	{
		m_strName=name;
		cout<<"Person()"<play()" << endl;
	}
protected:
	string m_strName;
};

/**
 * 定义士兵类: Soldier
 * 士兵类公有继承人类
 * 数据成员: m_strName
 * 成员函数: attack()
 */
class Soldier:public Person
{
public:
	Soldier(string name="jim",int age=10)
	{
         m_strName=name;
		 m_iAge=age;
		 cout<<"Soldier()"<play();
}
int main(void)
{
    /*Soldier soldier;// 实例士兵对象
	soldier.m_strName="tomato";// 向士兵属性赋值"tomato"
   	soldier.Person::m_strName= "Jim";// 通过士兵对象向人类属性赋值"Jim"
	cout << soldier.m_strName << endl;
	cout << soldier.Person::m_strName << endl;
    soldier.attack();// 调用士兵对象方法
    soldier.Person::attack();   // 通过士兵对象调用人类方法*/
    Infantry infantry;
	system("pause");
	return 0;
}

我们实例化一个多重继承的时候我们可以看到他的调用顺序

C++多继承多重继承_第3张图片

按照继承的顺序调用构造函数

#include 
#include 
#include 
using namespace std;

/**
 * 定义人类: Person
 * 数据成员: m_strName
 * 成员函数: attack()
 */
class Person
{
public:
	Person(string name="jim")
	{
		m_strName=name;
		cout<<"Person()"<play()" << endl;
	}
protected:
	string m_strName;
};

/**
 * 定义士兵类: Soldier
 * 士兵类公有继承人类
 * 数据成员: m_strName
 * 成员函数: attack()
 */
class Soldier:public Person
{
public:
	Soldier(string name="jim",int age=10)
	{
         m_strName=name;
		 m_iAge=age;
		 cout<<"Soldier()"<play();
}
int main(void)
{
    /*Soldier soldier;// 实例士兵对象
	soldier.m_strName="tomato";// 向士兵属性赋值"tomato"
   	soldier.Person::m_strName= "Jim";// 通过士兵对象向人类属性赋值"Jim"
	cout << soldier.m_strName << endl;
	cout << soldier.Person::m_strName << endl;
    soldier.attack();// 调用士兵对象方法
    soldier.Person::attack();   // 通过士兵对象调用人类方法*/
    Infantry infantry;
	test1(infantry);
	test2(infantry);
	test3(&infantry);
	system("pause");
	return 0;
}

下面这是这个程序的执行结果

C++多继承多重继承_第4张图片

在执行了test1之后有一个~Person(),代表的是在调用这个函数的时候需要形成一个临时的对象,所以才会在执行完之后有销毁操作

下面给出一个多继承的实例

#include 
#include 
#include 
using namespace std;

class Worker
{
public:
	Worker(string code="001")
	{
       m_strCode=code;
       cout<<"Worker()"<carry();
	p->sow();
	delete p;
	system("pause");
	return 0;
}

运行结果如下

C++多继承多重继承_第5张图片

我们可以看到要是实例化一个多继承的MigrantWorker的类先要执行Farmer的构造函数,再执行Worker,再执行MigrantWorker,我们通过结果可以清晰地看到执行过程~

你可能感兴趣的:(C++)