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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 进程及进程控制块「建议收藏」

    进程及进程控制块「建议收藏」进程是程序的一个执行实例,是一个正在执行的程序。能分配处理器并由处理器执行的实体。     在一个系统上可以同时运行多个程序。并发运行,一个进程的指令和另一个进程的指令是交错执行的。     进程的两个基本元素是程序代码(可能被执行相同程序的其他进程共享)和代码相关联的数据集。进程是一种动态描述,但并不代表所有的进程都在运行(进程在内存中因策略或调度需求,会处于各种状态)。

    2025年7月22日
    3
  • 用MATLAB GUI做一个简单的绩点计算界面

    用MATLAB GUI做一个简单的绩点计算界面本文主要记录如何用MATLAB自带的GUI功能做一个绩点计算界面。并以此来简单介绍一下MATLABGUI的使用过程。完整代码见:https://github.com/ZhouJiaHuan/compute-GPA-master启动guide工具箱guide是MATLAB用来制作GUI界面的工具性,我们只要在MATLAB命令窗口中输入命令guide即可打开GUI制作界面,如下图:…

    2022年6月7日
    28
  • Myeclipse注册码_为什么myeclipse

    Myeclipse注册码_为什么myeclipsemyeclipse6注册码生成最近由于项目使用eclipse+myeclipse开发工具开发,打开eclipse老是提示让激活myeclipse,需要注册码,于是去网上找了一些注册码来试,结果都不行,最后终于找到一篇文章介绍如何用Java程序生成注册码,参考百度经验原文:http://jingyan.baidu.com/article/a24b33cd53a9b819fe002ba5.html

    2022年9月29日
    2
  • protel99se中文版

    protel99se中文版教程:1、解压压缩包,打开“Protel99SE”文件夹,双击“setup.exe”开始安装软件。2、输入用户信息,可以任意输入,然后输入3、选择软件的安装位置,建议默认,便于。4、选择安装类型,选择typical典型的进行安装。5、选择开始菜单文件夹,默认即可。6、准备安装软件,点击next。7、正在安装,请稍等一下。8、安装完成,资源地址:protel99se中文版…

    2022年5月7日
    69
  • 滚动条样式全局修改

    滚动条样式全局修改滚动条样式是当前浏览器的样式,以webkit内核为准。改的全局样式。不单单是elementUI样式新建一个reset.scss//border-radius圆角/*设置滚动条的样式*/

    2022年7月1日
    25
  • CAN协议深度解析-简单易懂协议详解[通俗易懂]

    CAN协议深度解析-简单易懂协议详解[通俗易懂]CAN-bus通信帧共分为数据帧、远程帧、错误帧、过载帧和帧间隔五种类型。显形隐形电平CAN-bus发布了ISO11898和ISO11519两个通信标准,此两个标准中差分电平的特性不相同。显性电平:总线上只要有1个节点驱动为显性,则总线表现为显性位电平,逻辑解析为“0”。隐形电平:只有总线上的各节点都不将总线驱动成显性电平,总线才表现为隐形位对应的电平,逻辑解析为“1”。位填充:位填充是为防止突发错误而设定的功能。当同样的电平持续5位时,则添加一个位的反型数据。数据帧数据帧结构上

    2022年6月28日
    50

发表回复

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

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