C++|一个实例简单了解动态多态性

C++|一个实例简单了解动态多态性动态多态性发生在程序运行期,是动态绑定,通过继承、虚函数、指针来实现。1在基类中的某成员函数被声明为虚函数后,在之后的派生类中可以重新来定义它。

大家好,欢迎来到IT知识分享网。

多态性允许不同类的对象对同一消息做出不同的响应。

静态多态性:函数重载;

动态多态性:通过虚函数来实现。

动态多态性发生在程序运行期,是动态绑定,通过继承、虚函数、指针来实现。程序在运行时才决定调用的函数,通过父类指针调用子类的函数,可以让父类指针具有多种形态。

1 在基类中的某成员函数被声明为虚函数后,在之后的派生类中可以重新来定义它。但定义时,其函数原型、函数名、参数个数、参数类型的顺序,都必须和基类中的原型完全相同

2 必须通过基类指针指向派生类,才能通过虚函数实现运行时的多态性;

3 虚函数具有继承性,只要在基类中显式声明了虚函数,在派生类中函数名前的virtual可以略去,因为系统会根据其是否和基类中虚函数原型完全相同来判断是不是虚函数。一个虚函数无论被公有继承了多少次,它仍然是虚函数;

4 使用虚函数,派生类必须是基类公有派生的。

5 虚函数必须是所在类的成员函数,而不能是友元函数,也不能是静态成员函数。因为虚函数调用要靠特定的对象类决定应该激活哪一个函数。

6 构造函数不能是虚函数,但析构函数可以是虚函数;

实例:

C++|一个实例简单了解动态多态性

附代码:

#include <iostream> #include <string> using namespace std; class Graph { protected: double x; double y; public: Graph(double x, double y); virtual void showArea(); }; Graph::Graph(double x,double y) { this->x=x; this->y=y; } void Graph::showArea() { cout<<"couting Graph's Area"<<endl; } class Rectangle:public Graph { public: Rectangle(double x, double y):Graph(x,y){}; void showArea(); }; void Rectangle::showArea() { cout<<"Rectangle's area: "<<x*y<<endl; } class Triangle:public Graph{ public: Triangle(double d, double h):Graph(d,h){}; void showArea(); }; void Triangle::showArea() { cout<<"Triangle's area: "<<x*y*0.5<<endl; } class Circle:public Graph { public: Circle(double r):Graph(r,r){}; void showArea(); }; void Circle::showArea() { cout<<"Circle's Area: "<<3.14*x*y<<endl; } int main() { Graph * g; Rectangle rec(8,5); g = &rec; g->showArea(); Triangle tri(6,8); g = &tri; g->showArea(); Circle cir(2); g = &cir; g->showArea(); cin.get(); return 0; } /*output: Rectangle's area: 40 Triangle's area: 24 Circle's Area: 12.56 */ 

-End-

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/80671.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信