虚函数和纯虚函数
多态是C++的三大特性之一,多态分为两类:
静态多态:静态多态的函数地址早绑定,编译阶段确定函数地址,静态连编 (函数重载 运算符重载 复用函数名属于静态多态)
动态多态:动态多态的函数地址晚绑定,运行阶段确定函数地址,动态连编 (派生类和虚函数运行时多态)
虚函数 是在基类中使用关键字 virtual 声明的函数。在派生类中重新定义基类中定义的虚函数时,会告诉编译器不要静态链接到该函数。
我们想要的是在程序中任意点可以根据所调用的对象类型来选择调用的函数,这种操作被称为动态链接,或后期绑定。
虚函数:
virtual 返回值类型 函数名(){};
#include <iostream>
using namespace std;
class Parents{
public:
virtual void speak(){ //虚函数
cout << "Parents speak" << endl;
}
};
class Child1:public Parents{
public:
void speak(){
cout << "Child1 speak" << endl;
}
};
class Child2: public Parents{
public:
void speak(){
cout << "Child2 speak" << endl;
}
};
int main(){
Parents *p;
Child1 c1;
p =&c1;
p->speak();
Child2 c2;
p =&c2;
p->speak();
}
Child1 speak
Child2 speak
如果基类中的函数不加virtual ,运行结果如下
Parents speak
Parents speak
纯虚函数
基类中定义虚函数,以便在派生类中重新定义该函数更好地适用于对象,但是在基类中又不能对虚函数给出有意义的实现,这个时候就会用到纯虚函数。
virtual 返回值类型 函数名()=0;
#include <iostream> using namespace std; class Parents{ public: virtual void speak()=0; //纯虚函数 }; class Child1:public Parents{ public: void speak(){ cout << "Child1 speak" << endl; } }; class Child2: public Parents{ public: void speak(){ cout << "Child2 speak" << endl; } }; int main(){ Parents *p; Child1 c1; p =&c1; p->speak(); Child2 c2; p =&c2; p->speak(); }
Child1 speak
Child2 speak
注意:
类中有一个纯虚函数就成为抽象类
抽象类不能被实例化
子类必须实现父类中的纯虚函数,否则子类也属于抽象类
分类:
C++
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2019-12-14 python操作elasticsearch
2019-12-14 elasticsearch入门及安装