虚基类

来源:互联网 发布:免费云数据库 编辑:程序博客网 时间:2024/05/21 06:26

虚基类要解决的问题:多重继承时,若两个基类都是从同样的 基类继承而来的,那么肯定会有爷爷类的公共成员继承了两次。

  为了避免这个麻烦,c++规定了虚基类,只继承一次。

  具体的操作细节呢??

 1:在父亲类继承时,记得注明Virtual,即class Teacher:virtual Person;

 2:初始化即构造函数,全部子类中进行。和以前的并不一样。

附上代码

//虚基类 #include<iostream>#include<string.h>using namespace std;//--------------------person类class Person{public:Person(int x,char y[20]);protected:int age;char name[20];}; Person::Person(int x,char y[20]){x=age;strcpy(name,y);} //--------------------teacher 类 class Teacher:virtual public Person{   public:    void display();    Teacher(int x,char y[20],char title[20]);protected:char title[20];} ;void Teacher::display(){cout<<"age"<<age<<endl<<"name"<<name<<endl<<"title"<<title<<endl;}Teacher::Teacher(int x,char y[20],char z[20]):Person(x,y){strcpy(title,z);}//--------------------------------Student类class Student:virtual public Person{public:Student(int x,char y[20],int z);void display();protected:int score;};Student::Student(int x,char y[20],int z):Person(x,y){score=z;}void Student::display(){cout<<"score"<<score<<endl; }//--------------------------------------graduateclass Graduate:public Teacher,public Student{public:Graduate(int x,char y[20],char z[20],int i,int w);void display();private:int wage;};Graduate::Graduate(int x,char y[20],char z[20],int i,int w):Person(x,y),Teacher(x,y,z),Student(x,y,i){wage=w;} void Graduate::display(){Teacher::display();Student::display();cout<<"wage"<<wage<<endl;}//--------------------------------------mainint main(){Graduate a(25,"yangyang","professor",1,15000);a.display();}


1 0