类与对象 基础疑难知识点总结


基本要点:



1.  公有继承

基类成员属性

派生类新增成员函数中

派生类外(对象)

公有

可以引用

可以引用

保护

可以引用

不可引用

私有

不可引用

不可引用

  

2. 如何访问基类的私有成员?

私有成员的继承是被“屏蔽”了,派生类的成员函数无法使用。

派生类成员函数可以通过基类的公有成员函数或受保护的成员函数来访问
派生类对象可以通过公有成员函数来访问

3.私有继承

基类成员属性

派生类新增成员函数中

派生类外(对象)

公有

可以引用

不可引用

保护

可以引用

不可引用

私有

不可引用

不可引用

3. 如何访问基类的私有成员?

派生类的成员函数可以通过基类的公有成员函数或受保护的成员函数来访问

4.保护继承

基类成员属性

派生类新增成员函数中

派生类外(对象)

公有

可以引用

不可引用

保护

可以引用

不可引用

私有

不可引用

不可引用


2. 如何访问基类的私有成员?

私有成员的继承是被“屏蔽”了,派生类的成员函数无法使用。

派生类成员函数可以通过基类的公有成员函数或受保护的成员函数来访问
派生类对象可以通过公有成员函数来访问

3.私有继承

基类成员属性

派生类新增成员函数中

派生类外(对象)

公有

可以引用

不可引用

保护

可以引用

不可引用

私有

不可引用

不可引用

3. 如何访问基类的私有成员?

派生类的成员函数可以通过基类的公有成员函数或受保护的成员函数来访问

4.保护继承

基类成员属性

派生类新增成员函数中

派生类外(对象)

公有

可以引用

不可引用

保护

可以引用

不可引用

私有

不可引用

不可引用

5.私有和保护继承区别


6.

处于同一层次的各基类构造函数的执行顺序取决于定义派生类时所指定的基类顺序;与派生类构造函数中所定义的成员初始化列表顺序没有关系。

7.

多重继承下的构造函数
当初始化虚基类时,只有 最远派生类的构造函数会调用虚基类的构造函数 ,该派生类的其它基类对虚基类构造函数的调用会被自动忽略。 
8.
多重继承下的构造函数
若同一层次中同时包含虚基类和非虚基类 , 应先调用虚基类的构造函数 , 再调用非虚基类的构造函数 , 最后调用派生类构造函数

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.

v 赋值兼容规则指在程序中需要使用 基类对象 的任何地方,都可以用 公有派生类 的对象来替代。
v 赋值兼容规则中所指的替代包括以下的情况:
n 派生类的对象可以赋给基类对象(强制类型转换)
n 派生类的对象可以初始化基类的引用
n 派生类的对象的地址可以赋给基类类型的指针
v 赋值兼容规则的特点
n 在替代之后,派生类对象就可以作为基类的对象使用,但只能使用从基类继承的成员。
v

10.

允许将一个声明为指向基类的指针指向其公有派生类对象,但是不能将一个声明为指向派生类对象的指针指向其基类的一个对象。允许将一个声明为指向基类的指针指向其公有派生类对象,但是不能将一个声明为指向派生类对象的指针指向其基类的一个对象。



猜你喜欢

转载自blog.csdn.net/sdz20172133/article/details/80909153