C++---基类→继承→派生类

1.public,protected,private标号的访问范围。

public:可以被该类的函数,友元函数,子类函数访问,也可以由该类的对象访问。
protected: 可以被该类的函数,友元函数,子类函数访问,但不能被该类的对象访问。
private: 可以被该类的函数,友元函数访问,但不能被子类函数和该函数对象访问。

2、三种继承方法继承后子类(派生类)成员相较于基类属性变化

继承方式默认public,且会继承所有成员(但会依据继承方式而降级)

派生类可以访问基类中所有的非私有成员。因此基类成员如果不想被派生类的成员函数访问,则应在基类中声明为 private。
一个派生类继承了所有的基类方法,但下列情况除外:
  基类的构造函数、析构函数和拷贝构造函数。
  基类的重载运算符。
  基类的友元函数。

public, protected, private三种继承方式,它们相应地改变了派生类成员的访问属性。

基类中的成员类型:				public成员		protected成员	private成员		基类的private成员		继承引起的访问控制关系变化概括
												(始终为private)
-------------------继承后派生类中的成员类型-----------------------------
1.public继承(全部不变):		public			protected		private			基类私有成员不可见		基类的非私有成员在子类的访问属性不变
2.protected继承(降级一个):		降级protected	protected		private			基类私有成员不可见		基类的非私有成员都为子类的保护成员
3.private继承(全部降为私有):	private			private			private			基类私有成员不可见		基类中的非私有成员都称为子类的私有成员
																				(即派生类成员函数/对象不能直接访问,但仍可以通过基类公有/保护函数间接访问私有成员)
																				(毕竟子类会继承基类的public函数)



但无论哪种继承方式,上面两点都没有改变:
1.private 成员只能被本类成员(类内)和友元访问,不能被派生类访问;
2.protected 成员可以被派生类访问。
3.派生类可以访问基类中所有的非私有成员。因此基类成员如果不想被派生类的成员函数访问,则应在基类中声明为 private。

3.三种继承方式继承后基类成员在派生类中的可见性情况

公有继承(public):
基类成员对于其派生类的可见性:public、protected成员可见,private成员不可见。
基类成员对于其派生类对象的可见性:public成员可见,protected、private成员不可见。

保护继承(protected):
基类成员对于其派生类的可见性:public、protected成员可见,private成员不可见。
基类成员对于其派生类对象的可见性:都不可见。

私有继承(private):
基类成员对于其派生类的可见性:public、protected成员可见,private成员不可见。
基类成员对于其派生类对象的可见性:都不可见。

仅在共有继承时派生类对象可以看到基类public成员

4.基类与派生类的关系。

1、子类是父类的具体化
这个特点和现实的真实模型很类似,比如父亲规划一个事业蓝图没有实现就乘鹤西去,通常希望儿子来完成,儿子在父亲的基础之上,不仅将父亲的事业继承过来,还能够发扬光大,将父亲规划的蓝图一点一点实现。在编程中,父类是对若干个子类的抽象,而子类是父类的具体化。父类抽取了他所有子类的公共特征,而子类通过增加行为将抽象类改造成适应当前发展需要的类。

2、子类是父类定义的延续
有些家族的父亲为了锻炼后人,给后人留下的仅仅是纸上画的一张张“大饼”,让后人通过自己的努力将纸上的大饼变成可以吃的大饼。在使用C++编程中,可以在父类中只定义某些操作而不实现,由子类来实现。这种情况就是子类对父类的延续,也使子类常用的一种方法(纯虚函数)。

3、子类是父类的组合
在多继承时,一个子类有多于一个的父类,这时子类将是所有父类行为的组合。子类将其本身与父类区别开的方法是添加或修改数据成员或成员函数。

5、多继承:即一个子类可以有多个父类,它继承了多个父类的特性。

C++ 类可以从多个类继承成员,语法如下:

class <派生类名>:<继承方式1><基类名1>,<继承方式2><基类名2>,{
	<派生类类体>
};

虚拟继承

猜你喜欢

转载自blog.csdn.net/qq_42024067/article/details/107240294