Oop_pta_4
继承和派生
- 默认成员是可以被继承的
- 继承时,最安全的访问说明符是private,不管任何情况下子类都无法访问,但default可能存在特例
protected也很安全,但不能说是最安全
要注意,受保护的成员是不能直接通过对象名访问的,不管是在子类还是父类都不行1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21class A
{
protected:
int marks;
void isprotected() {}
public:
A() {}
void ispublic() {}
};
class B : protected A
{
};
int main()
{
A a;
a.ispublic(); // ok
a.isprotected(); // error
B b;
b.ispublic(); // error
b.isprotected(); // error
} - 当父类的成员是受保护的,子类使用私有继承,那么只有最近的子类可以继承受保护的成员,而且这些成员在子类中会变成私有的,更远的继承关系无法继承这些成员(但内存还是会分配的)
当父类成员是私有的,子类怎么都继承不来,除非改父类 - 在多级继承中,父类/超类的公有成员,会一直继承下去
- 菱形继承,也能叫成Diamond Problem
A A是基类,B和C同时继承A,D继承B和C
/ \ 只能发生在A B C声明了虚函数并且有override,而且D没有声明这个虚函数的情况
B C 因为这种情况下,编译器就不知道D到底使用B还是C声明的虚函数
\ / Hybrid的继承方式导致了Diamond Problem
D - enclosing class: 外围类(in java)
nested class: 嵌套类,和外围类是相对的概念 - 单级继承(single inheritance):派生类只有一个基类;派生类必须实现所有的抽象方法
Single level inheritance supports runtime inheritance
分层继承(hierarchical inheritance):一个以上的类从基类继承
多继承(multiple inheritance):派生类可以有两个或多个基类
多级继承(multi-level inheritance):子子孙孙无穷尽也(bushi),但一个类只继承自一个类 - ||, +=, && 不能重载(+=好奇怪,但搜出来说不能)
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 slx's NOTEBOOK!