首页 > 代码库 > C++的多态与虚函数
C++的多态与虚函数
多态性:对于同一消息,不同的对象由不同的响应方式
多态分为静态多态(编译时多态)和动态多态(运行时多态),动态多态通过虚函数来实现。
覆盖-->子类和父类中有同名同参数列表但是功能不同的函数叫做覆盖,在同一个类中有相同的是重复定义,不是覆盖。
虚函数的使用方法,如下:
①在基类中声明一个函数为虚函数,如:
//基类vStudentclass vStudent {public: vStudent(int,string); virtual void display();//虚函数,用来实现多态性,在定义时无需声明其为虚函数(virtual关键字不写)protected: int num; string name;};vStudent::vStudent (int a,string b): num(a),name(b) {};void vStudent::display() {//在定义时无需声明其为虚函数(virtual关键字不写) cout<<name<<" is "<<num<<endl;};
②在派生类中定义一个同名同参数列表同类型的函数,该函数会被自动识别为虚函数,virtual关键字可写可不写,如:
//派生类vGraduateclass vGraduate: public vStudent {public: vGraduate(int,string,double); virtual void display();//由于基类中的同名函数为虚函数,此派生类中的该函数自动成为虚函数,不用特意声明(virtual可有可无,习惯加上,程序更清晰)。private: double pay;};vGraduate::vGraduate(int a,string b,double c): vStudent(a,b),pay(c) {};void vGraduate::display() { cout<<name<<" is "<<num<<".His pay is "<<pay<<endl;};
③在主函数中的调用,如下:
int main() { vStudent vs(1,"zhangsan"); vGraduate vg(2,"lisi",9000); vStudent *pvs;//定义一个指向基类对象的指针变量pvs pvs = &vs;//指向基类对象vs pvs->display();//调用基类中的display函数 pvs = &vg;//指向基类对象vg pvs->display();//调用派生类中的display函数 return 0;};
基类的析构函数一般都是要声明为虚函数的!当delete指向派生类的指针时比较方便。
注意,纯虚函数,包含纯虚函数的类都是抽象类,抽象类是不能生成对象的!
纯虚函数声明方式:
virtual 函数类型 函数名 (参数列表) =0;
抽象类: 不用来定义对象而只是作为一种基本类型用作继承的类称为抽象类!
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。