一.继承的概念
1.继承的定义:继承是一种复用手段,通过继承关系,子类可以从父类获得一些成员变量或成员函数,共享公有的东西,实现各自本质不同的东西。
2.继承的书写:在子类的类名后面加上":"再加上继承关系,再加上父类的名字。
class Person
{
private:
string _name;
};
class Student : public Person //Student类继承了父类Person
{
public:
int _stunum;
};
3.如果子类继承了父类,则父类的成员(成员变量或成员函数)都会(不管是公有、私有还是保护的成员)都会变成子类的一部分,但是私有的是不可见(不可见不是在子类中不存在,而是在子类中不能访问这些成员)。
例如,对于上面的继承关系,我们定义一个子类对象 Student s;
则监视窗口如下:
可以看到父类Person类的私有数据成员_name也被继承下来了,但是不能在Student类里访问这个私有成员(并且我们也不能通过Person类的对象访问该数据成员,因为其访问限定符是私有的)。
二.三种继承关系与三种类成员访问限定符
1.三种继承关系
①public继承 ②protected继承 ③private继承
2.三种类成员访问限定符
(1)我们知道C++类里面的访问限定符有3种,分别是public、private、protected;
(2)如果访问限定符为public则在类外可以通过对象来访问;如果访问限定符为private或protected,则在类外不可访问。
(3)访问限定符直接决定了能否在类外访问该成员。
3.三种继承关系与三种访问限定符有什么样的关系?
(1)如果父类成员的访问属性为private,则无论是何种继承方式,父类成员在子类都不可见。(不可见不是在子类中不存在,而是在子类中不能访问这些成员)。
(2)当父类成员的访问属性不是private时:
①对于public继承:父类所有成员在子类的访问属性都不变;(如果父类成员的访问属性是公有则在子类里面的访问属性也是公有,如果父类成员的访问属性是保护则在子类里面的访问属性也是保护)
②对于protected继承:父类所有的成员在子类的访问属性都变为protected;(不论父类的成员访问限定符是public还是protected,父类成员在子类访问属性都是protected)
③对于private继承:父类所有的成员在子类的访问属性都变为private。(不论父类的成员访问限定符是public还是protected,父类成员在子类访问属性都是private)
4.面试题:如何定义一个不能被继