基本要点:
1. 公有继承
基类成员属性 |
派生类新增成员函数中 |
派生类外(对象) |
公有 |
可以引用 |
可以引用 |
保护 |
可以引用 |
不可引用 |
私有 |
不可引用 |
不可引用 |
2. 如何访问基类的私有成员?
私有成员的继承是被“屏蔽”了,派生类的成员函数无法使用。
派生类成员函数可以通过基类的公有成员函数或受保护的成员函数来访问
派生类对象可以通过公有成员函数来访问
3.私有继承
基类成员属性 |
派生类新增成员函数中 |
派生类外(对象) |
公有 |
可以引用 |
不可引用 |
保护 |
可以引用 |
不可引用 |
私有 |
不可引用 |
不可引用 |
3. 如何访问基类的私有成员?
派生类的成员函数可以通过基类的公有成员函数或受保护的成员函数来访问
4.保护继承
基类成员属性 |
派生类新增成员函数中 |
派生类外(对象) |
公有 |
可以引用 |
不可引用 |
保护 |
可以引用 |
不可引用 |
私有 |
不可引用 |
不可引用 |
2. 如何访问基类的私有成员?
私有成员的继承是被“屏蔽”了,派生类的成员函数无法使用。
派生类成员函数可以通过基类的公有成员函数或受保护的成员函数来访问
派生类对象可以通过公有成员函数来访问
3.私有继承
基类成员属性 |
派生类新增成员函数中 |
派生类外(对象) |
公有 |
可以引用 |
不可引用 |
保护 |
可以引用 |
不可引用 |
私有 |
不可引用 |
不可引用 |
3. 如何访问基类的私有成员?
派生类的成员函数可以通过基类的公有成员函数或受保护的成员函数来访问
4.保护继承
基类成员属性 |
派生类新增成员函数中 |
派生类外(对象) |
公有 |
可以引用 |
不可引用 |
保护 |
可以引用 |
不可引用 |
私有 |
不可引用 |
不可引用 |
5.私有和保护继承区别
6.
处于同一层次的各基类构造函数的执行顺序取决于定义派生类时所指定的基类顺序;与派生类构造函数中所定义的成员初始化列表顺序没有关系。
7.
A()->B()->D()->C()->E()->F()。
8.
问题:派生类和基类中都存在同名的函数,此时是函数的重载吗?
否,因为作用域不同。
9.
使用using命令,使得基类中的func函数没有被隐藏
class B
{
public:
void func(int) {cout <<"B::func(int)" <<endl; }
void func(int, int) {cout <<"B::func(int,int)" <<endl; }
};
class D : public B
{
public:
using B::func;//使用using 命令,使得基类中的func函数没有被隐藏
void func(int,int) {cout <<"D::func(int,int)"<<endl;}
};
int main()
{ D d;
d.func(1);
d.func(1,1);
d.B::func(1,1);
return 0;
}
执行结果:
B::func(int)
D::func(int,int)
B::func(int,int)
9.
10.
允许将一个声明为指向基类的指针指向其公有派生类对象,但是不能将一个声明为指向派生类对象的指针指向其基类的一个对象。允许将一个声明为指向基类的指针指向其公有派生类对象,但是不能将一个声明为指向派生类对象的指针指向其基类的一个对象。