前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >c++多态的案例分析

c++多态的案例分析

作者头像
全栈程序员站长
发布2022-07-14 15:52:04
6040
发布2022-07-14 15:52:04
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是全栈君

近期在研究c++中多态的应用 ,当中遇到些许的疑问与问题,可是终于的结果是不容置疑的,以下记录下我的学习过程,以纪念本个知识点。

首先,是从一个案例開始的,题目大意是这种:

设定一个多边形的公共类,然后再设定多个图形的各个派生类,最后通过基类,依据多态的应用通过基类,求出所求图形的面积

于是依据自己所学的知识,開始大致的勾画原始的雏形例如以下:

#include using namespace std;

class Shape //基类 { public: virtual double area()=0; };

int main () { Circle c(5); //圆參数赋值 Rectangle r(3,4); //矩形參数赋值 Triangle t(3,4); //三角形赋值 Shape *p; //设置一个基类的指针 p=&c; //调用求圆面积的方法 求圆的面积 cout<<p->area()<<endl; p=&r; //调用求矩形面积的方法求矩形面积 cout<<p->area()<<endl; p=&t; //调用求三角形面积的方法求三角形的面积 cout<<p->area()<<endl; system(“pause”); return 0; }

然后,再把一个一个的派生类,加入进去 ,效果例如以下:

#include using namespace std; class Shape { public: virtual double area() =0; };

class Circle: public Shape { public: Circle(double r):radius(r){} virtual double area() { return radius*radius*3.14159; } private: double radius; }; class Rectangle:public Shape { public: Rectangle(double x,double y):x(x),y(y){} virtual double area() { return x*y; } private: double x,y; }; class Triangle:public Shape { public: Triangle(double x,double y):x(x),y(y){} virtual double area() { return x*y/2; } private: double x,y; }; int main () { Circle c(1); Rectangle r(3,4); Triangle t(3,4); Shape *p; p=&c; cout<<p->area()<<endl; p=&r; cout<<p->area()<<endl; p=&t; cout<<p->area()<<endl; system(“pause”); return 0; }

执行结果:

相同的道理,还能够这样子写,仅仅是每一个人的习惯不同而已,代码例如以下:

#include using namespace std; class shape { public: virtual void area()=0; }; class Trangle : public shape { protected: double a,b; public: Trangle(double a,double b):a(a),b(b){}; virtual void area() { cout<<a*b*0.5<<endl; } }; class Rectangle:public shape { protected: double a,b; public: Rectangle(double a,double b):a(a),b(b){}; virtual void area() { cout<<a*b<<endl; } }; class Circle:public shape { protected: double a; public: Circle(double a):a(a){}; virtual void area() { cout<<3.14*a*a<<endl; } }; int main() { shape *p; Trangle t(1,1); Rectangle r(1,1); Circle c(2); p=&t; // 三角形面积 p->area() ; p=&r; //矩形面积 p->area() ; p=&c; // 圆形面积 p->area(); return 0; }

当中须要注意的点是: 一定要写成的是公有的派生,即public 不然默认的都是私有的派生。还有在写代码的过程中,一定要注意不要把英语字母写错,当中的一个字母错了,花了我好长时间,最后才检查出来,敲代码的前期大都会遇到这种情况的,我们须要做的就是,认真再认真。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/117974.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021年12月,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档