マルチ継承(大学院生類)
2120 ワード
#include<iostream>
using namespace std;
#include<string>;
class People
{
public:
People(const string& name,const string& sex, int age)
:_name(name)
, _sex(sex)
, _age(age)
{
}
virtual void Display()
{
cout << "name: " << _name << endl;
cout << "sex: " << _sex << endl;
cout << "age: " << _age << endl;
}
protected:
string _name;
string _sex;
int _age;
};
class Student:virtual public People
{
public:
Student(const string& name, const string& sex, int age, int num)
:People(name,sex,age)
, _num(num)
{
}
virtual void Display()
{
cout << "Student" << endl;
}
protected:
int _num;
};
class Teacher:virtual public People
{
public:
Teacher(const string& name, const string& sex, int age, int employeeNumber)
:People(name, sex, age)
, _employeeNumber(employeeNumber)
{
}
virtual void Display()
{
cout << "Teacher" << endl;
}
protected:
int _employeeNumber;
};
class Graduate:public Teacher,public Student
{
public:
Graduate(const string& name, const string& sex, int age, int employeeNumber, int num,const string& learnClass)
:People(name, sex, age)
, Teacher(name, sex, age,employeeNumber)
, Student(name,sex,age,num)
{
_learnClass = learnClass;
}
virtual void Display()
{
cout << "Graduate" << endl;
}
protected:
string _learnClass;//
};
void Test1()
{
People p("lxj", " ", 18);
People* p1 = &p;
p.Display();
p1->Display();
Student s("lt", " ", 21, 413);
p1 = &s;//p1=(People*)&s;
p1->Display();
}
void Test2()
{
People p("lxj", " ", 18);
People& p1 = p;
p.Display();
p1.Display();
Student s("lt", " ", 21, 413);
People& p2 =(People&) s;
s.Display();
p2.Display();
}
void Test3()
{
Graduate g("lxj", " ", 11, 22, 11, "software");
g.Display();
}
int main()
{
Test3();
system("pause");
return 0;
}