c++多态的案例分析
2014-11-13 19:30
309 查看
近期在研究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 不然默认的都是私有的派生。还有在写代码的过程中,一定要注意不要把英语字母写错,当中的一个字母错了,花了我好长时间,最后才检查出来,敲代码的前期大都会遇到这种情况的,我们须要做的就是,认真再认真。
首先,是从一个案例開始的,题目大意是这种:
设定一个多边形的公共类,然后再设定多个图形的各个派生类,最后通过基类,依据多态的应用通过基类,求出所求图形的面积
于是依据自己所学的知识,開始大致的勾画原始的雏形例如以下:
#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 不然默认的都是私有的派生。还有在写代码的过程中,一定要注意不要把英语字母写错,当中的一个字母错了,花了我好长时间,最后才检查出来,敲代码的前期大都会遇到这种情况的,我们须要做的就是,认真再认真。
相关文章推荐
- 一个基于工作流管理系统的需求分析案例
- 个人学术网站之发展:案例分析、宏观分析与政策建议, 参考~
- 编写优秀Bug报告的艺术及案例分析
- Struts在J2EE Web应用服务上的构架分析与案例设计
- (翻译)编写优秀Bug报告的艺术及案例分析
- 网络工程师学习参考资料路由器配置案例分析
- 编写优秀Bug报告的艺术及案例分析
- 广州软件测试交流会第六次沙龙案例分析总结[转载]
- [案例分析]一个职业经理人的败笔
- 案例面试分析工具/框架
- read-Atleap-11-主业务分析-NewsItem类-Hibernate继承关系实施案例
- 案例分析1---Spestore System Design
- 案例分析:培训合同与赔款事宜
- 网站需求分析案例
- Duwamish案例分析(MS)
- 数据库案例分析
- read-Atleap-10-主业务分析-ContentField类-Hibernate多对一关系实施案例
- 公司应对订单锐减策略案例分析
- 阿里巴巴网站的搜索引擎优化案例分析
- 自定义控件案例分析