这里写目录标题
- (1)面向对象四大特征
- A.抽象
- B.封装
- C.继承
- D.多态
- (2)动态绑定
(1)面向对象四大特征
A.抽象
把一类东西的共同属性和方法提取到一个类中,而不关注具体如何实现
B.封装
对象属性对外接是隐藏的,只能通过对象的方法进行访问和修改
通过类实现对现实情况的抽象,使用private权限实现对类的封装
class Caculater{
private:
int *Id; // 对数据进行封装,只有类能访问,外部智能通过提供的函数访问
public:
Caculater() { // 默认构造函数
std::srand(std::time(nullptr));
int randomNumber = std::rand();
Id = new int;
*Id = randomNumber;
}
Caculater(Caculater &caculater) { // 拷贝构造函数
Id = caculater.getId();
}
~Caculater() { delete Id; }
void showId()
{
if(Id) cout << "Id = " << *Id << endl;
else cout << "nullptr" << endl;
}
template <class T, class U>
auto add(const T &t, const U &u) const
{
return t + u;
}
int *getId()
{
return Id;
}
};
template <typename T>
void printf(const T &&t) { cout << t << endl; }
int main(){
// 隐式调用默认构造函数
Caculater caculater01;
// 调用成员函数
printf(caculater01.add(20, 10.1)); // 打印:30.1
return 1;
}
C.继承
派生类可以继承基类的非私有属性和方法,而无需自己重新定义
D.多态
静态多态:编译时多态
函数重载或模板重载
动态多态:运行时多态
父类型可以指向其子类型的实例,使子类型对同一方法作出不同的回应,也就是所谓的动态绑定
(2)动态绑定
通过基类指针或引用调用虚函数时,会根据实际对象的类型来确定要调用的函数版本
基类的引用或指针调用虚函数 virtual 时发生动态绑定