面向对象
1.什么是类?
是一种用户定义的数据类型,包含了数据成员和函数成员。数据成员存储与类相关的状态,函数成员定义对数据进行操作的方法。
2.面向对象程序设计思想?
面向对象程序设计(OOP)有三大特征,封装继承和多态。
封装
:将数据属性和操作方法打包,形成独立的对象,只暴露必要的接口。
继承
:允许子类继承父类的属性和方法,并且可以创建新的方法。
多态
:不同类的对象使用同一接口进行调用,有不同的行为。
3.多态的实现?
- 静态多态:编译时发生,通过函数重载、运算符重载实现
函数重载
:参数类型或者数量不同来实现运算符重载
:为类定义新的操作符函数
- 动态多态:运行时发生,通过虚函数实现
虚函数
:一个函数在基类被声明为虚函数时,可以在派生类重写纯虚函数和抽象类
:类中声明一个虚函数不提供实现(=0)包含纯虚函数成为抽象类,抽象类不能被实例化,只能被继承,派生类必须提供纯虚函数的实现。
4.动态多态的作用?
允许运行时通过基类指针或引用调用派生类的方法,使得相同操作有不同的效果。
实现的必要条件:
1.继承
:必须有两个类,基类和派生类
2.基类中有虚函数
:基类中至少一个函数被virtual关键字声明为虚函数,派生类通常会重写该虚函数
3.基类的指针或引用
:需要通过基类的指针或引用掉用虚函数,这样c++运行时才能够根据虚函数表来决定调用哪个函数
4.动态绑定
5.动态绑定的实现?
通过虚函数实现。当我们用基类指针或引用调用一个虚函数,C++会根据对象实际类型决定调用的函数。示例code如下:
//基类
class Animal {
virtual void Sound() {
std::cout << "animal sound" << std::endl;
}
};
//派生类
class Dog