c++多态的案例分析

c++多态的案例分析

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

全栈程序员社区此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“验证码”,获取验证码。在微信里搜索“全栈程序员社区”或者“www_javaforall_cn”或者微信扫描右侧二维码都可以关注本站微信公众号。

近期在研究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.net/117974.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 数据挖掘算法和实际应用案例

    数据挖掘算法和实际应用案例第一次写博客,这次主要引用Little_Rookie大佬的一篇博客,主要来说明一下数据挖掘的主要算法和分类,以及实际生活中的应用案例,同时也是为了方便自己以后的学习。如何分辨出垃圾邮件”、“如何判断一笔交易是否属于欺诈”、“如何判断红酒的品质和档次”、“扫描王是如何做到文字识别的”、“如何判断佚名的著作是否出自某位名家之手”、“如何判断一个细胞是否属于肿瘤细胞”等等,这些问题似乎都很专业,都…

    2022年6月16日
    32
  • linux查看网卡速率命令_linux查看网卡千兆还是万兆

    linux查看网卡速率命令_linux查看网卡千兆还是万兆1、ethtoolethtool网络接口名#ethtoolem4Settingsforem4:Supportedports:[TP]Supportedlinkmodes:10baseT/Half10baseT/Full100baseT/Half100baseT/Full1000baseT/FullSupportsauto-negotiation:YesAdvertis…

    2022年10月9日
    2
  • c++中对象和类的关系_类的对象只能访问该类的私有成员

    c++中对象和类的关系_类的对象只能访问该类的私有成员类以及类和对象的关系以及类的访问修饰符一.类的概念:二.类和对象的关系:三.类的组成:四.类的创建:五.类的访问修饰符:一.类的概念:类是对于某一类对象的一个统称,类是对象的抽象化,对象是类的实例。定义一个类时,相当于定义了一个数据类型的蓝图。但实际上并没有定义任何的数据,但它定义了类的名称意味着什么,也就是说,类的对象由什么组成及在这个对象上可执行什么操作,就是单纯的进行了一个定义。二.类和对象的关系:类就是对象的抽象化概念,一个类就是一个对象集合的总称,通俗的来讲就是对象需要什么这个类就提供什么

    2025年8月9日
    4
  • MYSQL经常使用命令列表

    MYSQL经常使用命令列表

    2021年12月16日
    36
  • 求逆矩阵公式推导_逆矩阵公式运算公式

    求逆矩阵公式推导_逆矩阵公式运算公式求逆矩阵公式推导

    2022年8月21日
    10
  • goland 2021.11.4 激活码-激活码分享

    (goland 2021.11.4 激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~23LNPMIJZT-eyJsaWNlb…

    2022年3月29日
    50

发表回复

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

关注全栈程序员社区公众号