封装继承和多态

一---封装
万事万物皆对象。
封装的意义:
将属性和行为作为一个整体。
可以把属性和行为放在不同的权限下进行管理。
public 类内,类外均可访问
protected 类内可以,类外不可以
private 类内可以,类外不可以
保护和私有的区别在于继承的时候儿子可以使用父亲的保护内容。


成员属性设置为私有优点
1)可以自己控制读写权限
2)对于写权限,我们可以检测数据的有效性(比如年龄在0-100岁之间)

二---继承
可以减少重复的代码
父类中所有的属性都会被继承下来,父类中的私有属性被编译器隐藏了,但数据确实继承下来了。


三---多态
多态的分类
1)静态多态:运算符重载,函数重载,复用函数名
2)动态多态:派生类和虚函数实现运行多态

静态和动态的区别:静态多态的函数地址早绑定-编译阶段确定函数地址,动态多态的函数地址晚绑定-运行阶段确定函数地址。

动态多态的要求:
1)要有继承关系
2)子类要重写父类的虚函数

动态多态的使用 :
父类的指针或者引用来指向子类对象

要想实现动态多态 ,父类中的函数必须为虚函数,这样就可以地址晚绑定。

多态的原理剖析:
如果不加virtual的话占1个字节,加了virtual之后占4个字节,说明virtual的底层是个指针。

vfptr(虚函数(表)指针)
v--virtual
f--function
ptr-pointer

这个指针会指向一个虚函数表(vftable),表内记录虚函数的地址。当子类重写了父类的虚函数,子类中的虚函数表内部会替换成子类的虚函数地址。当父类的指针或者引用指向子类的时候,就发生了多态。

 

原文地址:https://www.cnblogs.com/YXBLOGXYY/p/14315817.html