多重继承示例:
#include <iostream>
#include <stdlib.h>
using namespace std;
/*
保护继承和私有继承:
要求:1、Person类
数据成员:m_strName
成员函数:构造函数、析构函数、play();
2、Solder类
数据成员:m_iAge
成员函数:构造函数、析构函数、work();
3、Infantry类:
数据成员:无
成员函数:构造函数、析构函数、attack()
4、定义函数test1(Person p)、test2(Person &p)、test3(Person *p)
*/
class Person {
public:
Person(string name = "jim");
virtual ~Person();
void play();
protected:
string m_strName;
};
Person::Person(string name)
{
m_strName = name;
cout << "Person" << endl;
}
Person::~Person()
{
cout << "~Person" << endl;
}
void Person::play()
{
cout << "Person--play" << endl;
cout << m_strName << endl;
}
class Soldier: public Person {
public:
Soldier(string name = "james", int age = 20);
virtual ~Soldier();
void work();
protected:
int m_iAge;
};
Soldier::Soldier(string name, int age)
{
m_strName = name;
m_iAge = age;
cout << "Soldier()" << endl;
}
Soldier::~Soldier()
{
cout << "~Soldier()" << endl;
}
class Infantry : public Soldier {
public:
Infantry(string name = "jack", int age = 30);
~Infantry();
void attack();
};
Infantry::Infantry(string name, int age)
{
m_strName = name;
m_iAge = age;
// cout << m_strName << endl;
// cout << m_iAge << endl;
cout << "Infantry()" << endl;
}
Infantry::~Infantry()
{
cout << "~Infantry()" << endl;
}
void Infantry::attack()
{
cout << m_strName << endl;
cout << m_iAge << endl;
cout << "Infantry-attack()" << endl;
}
void test1(Person p)
{
p.play();
}
void test2(Person &p)
{
p.play();
}
void test3(Person *p)
{
p->play();
}
int main(void)
{
Infantry infantry;
test1(infantry);
test2(infantry);
test3(&infantry);
system("pause");
return 0;
}
打印结果: