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

相关推荐

  • centos7系统更新命令_centos 更新

    centos7系统更新命令_centos 更新1.查看网络IP ifconfig2.下载命令 wget+网址3.安装 yum-y install + 目标4.删除文件 sudo rm 文件所在目录/目标强制删除文件 rm -f删除目录 rm -rf5.复制一个文件到另一个文件夹sudo cp /文件夹/文件 /另一个文件夹6.对一些文件进行读写sudo vim 文件名7….

    2022年8月18日
  • AMD CPU安装Intel HAXM

    AMD CPU安装Intel HAXM1.2.找到安装目录(我的安装目录:F:\Android\SDK\extras\google\Android_Emulator_Hypervisor_Driver)下的这个文件:silent_install,右击该文件选择“以管理员运行”,即可。…

    2022年6月28日
  • 2018手机号码正则表达式

    2018手机号码正则表达式最近发现各大手机运营商又增加了新的号码段,在项目中的判断手机号码的正则表达不能用了,自己搜集了一下,新写了一个正则表达式,希望有帮助。 匹配手机号码的正则表达式: ^((13[0-9])|(14[5,7])|(15[0-3,5-9])|(17[0,3,5-8])|(18[0-9])|166|198|199|(147))\\d{8}$ /***判断是否是手机号**@pa…

    2022年6月3日
  • int类型的长度是多少_强制转换成int类型

    int类型的长度是多少_强制转换成int类型Int16意思是16位整数(16bitinteger),相当于short占2个字节-32768~32767Int32意思是32位整数(32bitinteger),相当于int占4个字节-2147483648~2147483647Int64意思是64位整数(64bitinterger),相当于longlong占8个字节…

    2022年9月20日
  • ES6开发_php的开发环境

    ES6开发_php的开发环境ES6的开发环境搭建

    2022年4月21日
  • spring是什么意思_什么spring是孩子

    spring是什么意思_什么spring是孩子Spring是什么?            Spring是一个开源的轻量级的Java开发框架。  2.Spring能帮我们做什么?          简化应用程序的开发。  3.简化应用程序开发体现在哪些方面?     ①IOC容器       Java思想是面向对象的开发,一个应用程序是由一组对象通过相互协作开发出的业务逻辑组成,那么如何管理这些对象,使他们高效地协作呢?抽象工厂、工…

    2022年10月31日

发表回复

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

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