码迷,mamicode.com
首页 > 编程语言 > 详细

c++多态的案例分析

时间:2014-08-09 13:29:47      阅读:379      评论:0      收藏:0      [点我收藏+]

标签:style   color   strong   ar   问题   代码   时间   line   

最近在研究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  不然默认的都是私有的派生。还有在写代码的过程中,一定要注意不要把英语字母写错,其中的一个字母错了,花了我好长时间,最后才检查出来,写程序的前期大都会遇到这样的情况的,我们需要做的就是,认真再认真。

 

c++多态的案例分析,布布扣,bubuko.com

c++多态的案例分析

标签:style   color   strong   ar   问题   代码   时间   line   

原文地址:http://blog.csdn.net/u011401496/article/details/38455443

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!