虚继承示例:
#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;
/*
虚继承:
要求:Farmer类 数据成员:m_strName;成员函数:构造函数、析构函数、sow();
Worker类 数据成员:m_strCore;成员函数:构造函数、析构函数、carry();
Migrantworker类:数据成员:无;成员函数:构造函数、析构函数
person类 数据成员:m_strColor;成员函数:构造函数、析构函数、printColor();
*/
#ifndef PERSON_H
#define PERSON_H
#include <string>
using namespace std;
class Person
{
public:
Person(string color = "white");
virtual ~Person();
void printColor();
protected:
string m_strColor;
};
#endif
Person::Person(string color)
{
m_strColor = color;
cout << "Person()" << endl;
}
Person::~Person()
{
cout << "~Person()" << endl;
}
void Person::printColor()
{
cout << m_strColor << endl;
cout << " Person-printColor()" << endl;
}
class Farmer:virtual public Person
{
public:
Farmer(string name = "jack" , string color = "black");
virtual ~Farmer();
void sow();
protected:
string m_strName;
};
Farmer::Farmer(string name, string color) : Person(color)
{
m_strName = name;
cout << "Farmer()" << endl;
}
Farmer::~Farmer()
{
cout << "~Farmer()" << endl;
}
void Farmer::sow()
{
cout << m_strName << endl;
cout << "Farmer-sow()" << endl;
}
class Worker : virtual public Person
{
public:
Worker(string code = "001", string color = "blue");
virtual ~Worker();
void carry();
protected:
string m_strCode;
};
Worker::Worker(string code,string color) : Person(color) //一般用初始化列表
{
m_strCode = code;
cout << "Worker()" << endl;
}
Worker::~Worker()
{
cout << "~Worker()" << endl;
}
void Worker::carry()
{
cout << m_strCode << endl;
cout << "Worker-carry()" << endl;
}
class Migrantworker : public Farmer, public Worker
{
public:
Migrantworker(string name, string code, string color);
~Migrantworker();
};
Migrantworker::Migrantworker(string name, string code, string color) : Farmer(name,color), Worker(code,color)
{
cout << "Migrantworker()" << endl;
}
Migrantworker::~Migrantworker()
{
cout << "Migrantworker()" << endl;
};
int main(void)
{
Migrantworker *p = new Migrantworker("jerry", "100", "yellow");
p->Farmer::printColor();
p->Worker::printColor();
delete p;
p=NULL;
system("pause");
return 0;
}
打印结果: