wordpress termmeta,广东网络seo推广公司,杭州电子商务网站开发,做网站需要什么硬件C虚基类 1.1虚基类的作用#xff1a;如果一个派生类有多个直接基类#xff0c;而且这些直接基类又有一个共同的基类#xff0c;则在最终的派生类中会保留该间接共同基类的多份同名成员。所以为了解决这个问题#xff0c;C提供虚基类的方法#xff0c;使得在继承间接共同基…C虚基类
1.1虚基类的作用如果一个派生类有多个直接基类而且这些直接基类又有一个共同的基类则在最终的派生类中会保留该间接共同基类的多份同名成员。所以为了解决这个问题C提供虚基类的方法使得在继承间接共同基类时只保留一个成员。1.2虚基类并不是在声明基类时声明的而是在声明派生类时指定继承方式时声明的因为一个基类可以在生成一个派生类时作为虚基类在生成另个派生类时不作为虚基类。1.3为了 保证虚基类在派生类中只继承一次应当在该基类的所有直接基类中声明为虚基类。虚基类的初始化 1.1如果在虚基类中定义了有参数的构造函数而且没有定义默认构造函数则在其所有派生类(包括直接和间接)中通过构造函数的初始化表对虚基类进行初始化。 1.2在最后的派生类中不仅要负责对其直接基类进行初始化还要负责对虚基类进行初始化。 1.3C编译系统只执行最后的派生类对虚基类的构造函数的调用而忽略虚基类的其他派生类(如类B和类C)对虚基类的构造函数的调用这就保证了虚基类的数据成员不会被多次初始化。 1.4一段代码 #include iostream using namespace std; class Person { public: Person(char* n,int a):name(n),age(a){} protected: char* name; int age; }; class Teacher:virtual public Person { public: Teacher(char* n,int a,char* t):Person(n,a),title(t){} protected: char* title; }; class Student:virtual public Person { public: Student(char* n,int a,float sco):Person(n,a),score(sco){} protected: float score; }; class Grudate:public Teacher,public Student { public: Grudate(char* n,int a,char* t,float sco,float w):Person(n,a),Student(n,a,sco) ,Teacher(n,a,t),wage(w){} void show() { cout name: name endl; cout age: age endl; cout score: score endl; cout title: title endl; cout wage: wage endl; } private: float wage; }; int main() { Grudate grud(shukai,20,good,100,9999); grud.show(); return 0; } 1.5在使用多重继承时要十分小心经常会出现二义性问题因此许多专业人员认为不要使用多重继承能用单一继承解决的问题就不要使用多重继承。