派生类的构成
从基类接收成员:
派生类把基类所有的数据成员接收过来。
调整从基类接收的数据成员:
可以改变基类成员在派生类中的访问属性,这是通过指定继承方式决定的。
1.公用继承
2.私有继承
3.保护成员和保护继承
说明:(1)公用的,派生类内和派生类外都可以访问;(2)受保护的,派生类内可以访问,派生类外不能访问,其下一层的派生类可以访问;(3)私有的,派生类内可以访问,派生类外不能访问;(4)基类中不可访问的,派生类内和派生类外都不能访问。
多级派生时的访问属性
class A{
public:
int i;
protected:
void f2();
int j;
private:
int k;
};
class B:public A{
public:
void f3();
protected:
void f4();
private:
int m;
};
class C:protected B{
public:
void f5();
private:
int n;
};
i f2 j k f3 f4 m f5 n
基类A: 公用 保护 保护 私有
公用派生类B: 公用 保护 保护 不可访问 公用 保护 私有
保护派生类C: 保护 保护 保护 不可访问 保护 保护 不可访问 公用 私有
多重继承的二义性问题
C++提供虚基类(Virtual base class)的方法,使得在继承间接共同基类时只保留一份成员。
规定:在最后派生类中不仅要负责对其直接基类进行初始化,还要负责对虚基类初始化
例:
class person{
public:
person(string nam,char s,int a){
name = nam;
sex = s;
age = a;
}
private:
string name;
char sex;
int age;
};
class Teacher:virtual public person{
public:
Teacher(String nam,char s,int a,string t):person(nam,s,a){
title = t;
}
protected:
string title;
};
class student:virtual public person{
public:
student(string nam,char s,ing a,float sco):person(nam,s,a){
score = sco;
}
protected:
float score;
};
class graduate:public teacher,public student{
public:
graduate(string nam,char s,int a,string t,float sco,float w):
person(nam,s,a),teacher(nam,s,a,t),studeng(nam,s,a,w){
wage = w;
}
private:
float wage;
};
注:不继承来自基类的构造函数和析构函数,派生类需要自己定义和重写自己的构造函数和析构函数
完