C++继承
继承的概念及定义
继承是面向对象程序设计的重要特性,其本质就是类的复用。
这里属于 is - a 的关系,我们的student 和 teacher 都继承了父类(基类) person 。
继承后父类的person的成员 都会变为子类的一部分,实现类的复用。
继承关系和访问限定符
总结来说,继承后的访问限定是 基类成员 和 继承方式权限小的那一个。其中基类中的private是不可见的。
这里的不可见解释:
private也被继承到了派生类中,但是语法限制派生类对象不论在类里还是类外都无法访问它。
如果基类成员不想在类外被访问,但要被派生类访问,我们使用protected限定,我们可以看出,protected限定符是为了继承而出现的。
还有一个小细节是,class 默认继承方式是private ,而struct 是public ,我们一般不会省略继承方式。
实际运用中,一般都是使用public继承,通过控制基类的成员限定符来达到目的。
基类和派生类对象的赋值转换
派生类对象 可以给基类的对象、 基类的指针、基类的引用,进行赋值。也叫做赋值兼容规则。
从图中我们可以很轻易的看出我们的子类给父类赋值的时候,仅会将子类中父类的部分进行赋值,我们可以形象的理解为切片。这就是派生类给基类赋值。
代码中的第三点我们先挖一个坑,之后再来填。
继承中的作用域
我们要知道,基类和派生类属于独立的作用域,此时就会产生问题,如果基类和派生类中有同名成员,子类对象将会自动屏蔽掉父类继承下来的同名成员,我们称此情况为隐藏,也叫做重定义。当然我们可以使用访问限定符的方式来指定基类中的同名成员。
函数名如果相同 直接构成了 隐藏/重定义。在此我们可以对比一下函数重载,他们的区别是:是否在同一作用域。重载一定是在同一作用域下的函数名相同。
基类::同名成员 (显式访问)
我们有一个派生类对象s,很容易通过监视窗口看出我们继承的结构
派生类成员在下,基类在上,且同名成员有不同的值。
想分别访问这两个不同的num,我们可以通过访问限定符的方式,默认为当前作用域。
派生类的默认成员函数
默认成员函数是指:我们不写编译器自动生成的函数。
其中有两种情况
1.我们真的没写
2.我们写了,但是是无参的或是全缺省的,我们都叫编译器自动生成
默认构造函数在类中只能有一个
接下来 ,我们来谈派生类中的默认构造函数
派生类