首页 > 代码库 > 解析C++中虚函数
解析C++中虚函数
C++中的一个重要特征是多态即使用同名函数实现不同的功能,多态分为编译时的多态和运行时的多态,编译时的多态主要是指运算符重载和函数重载,而运行时的多态主要是指派生类和虚函数的多态,即使用基类的应用或指针可以引用派生类中的方法(不能引用基类中没有而派生类中新增的方法),如果没有指明是虚函数,指向派生类的指针或引用将会直接调用基类中的方法。这是由于如果定义为虚函数,将会在对象中增加一个虚函数表,来存放虚函数地址,如果派生类重新定义了虚函数,将同时更改虚函数地址,将地址改为指向派生类中的方法。
例如:
#include"stdio.h" #include <iostream> using namespace std; class A { private: char *name; public : A(char *str); A(); void show(); char *getName(); }; A::A() { } A::A(char *str) { name=str; } void A::show() { cout<<"my name is "<<name<<"\n"; } char *A::getName() { return name; } class Singer:public A { public : Singer(char *str); void sing(); void show(); }; Singer::Singer(char *str):A(str) { } void Singer::sing() { cout<<"i can sing"<<"\n"; } void Singer::show() { cout<<"my name is "<<getName()<<"\n"; cout<<"i can sing"<<"\n"; } int main() { A* a1= new Singer("xxz"); a1->show();//基类的引用或指针可以引用派生类中基类的成员 getchar(); return 0; }基类中的show方法没有设为虚函数,则直接调用基类的show
运行结果为
如果在show前面增加virtual,基类将会调用派生类的方法
运行结果为
补充:1构造函数不能为虚函数,构造函数不能被重载
2 复制构造函数和运算符不能为虚函数
3析构函数应该为虚函数,销毁派生类应该调用派生类的析构函数,而不能调用基类的析构函数
解析C++中虚函数
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。