纯虚基类与虚函数的使用
来源:互联网 发布:开淘宝店怎么刷销量 编辑:程序博客网 时间:2024/05/20 13:06
图形虚基类,定义计算面积跟周长的函数。派生出圆形,三角形,矩形子类,并重新定义基类计算面积与周长的函数。
注意:当基类的指针指向派生类的时候,只能操作派生类中从基类中继承过来的数据。
虚基类:
class graph {public:virtual double perimeter() const= 0;virtual double area() const= 0; };
circle类:
#include"graph.h"class circle:public graph {public:circle(double r):radius(r){};//初始化成员列表virtual ~circle();double perimeter() const;double area() const;private:double radius;};
#include "circle.h"#define PI 3.14159double circle::area() const{return this->radius*this->radius*PI;}double circle::perimeter() const{return 2*this->radius*PI;}
rectangle类:
#include"graph.h"class rectangle:public graph{public:rectangle(double w,double h):width(w),height(h){};virtual ~rectangle();double perimeter() const;double area() const; private:double width;double height;};
#include "rectangle.h"double rectangle::area() const{return this->height*this->width;}double rectangle::perimeter() const{return 2*(this->height+this->width);}
triangle类:
#include"graph.h"class triangle:public graph{public:triangle(double a,double b,double c):boder1(a),boder2(b),boder3(c){};virtual ~triangle();double area() const;double perimeter() const;private:double boder1;double boder2;double boder3;};
#include "triangle.h"#include<cmath>double triangle::area() const{double ave = (this->boder1+this->boder2+this->boder3)/2;return sqrtf(ave*(ave-this->boder1)*(ave-this->boder2)*(ave-this->boder3)); //利用海伦公式}double triangle::perimeter() const{return this->boder1+this->boder2+this->boder3;}
主函数:
#include<iostream>#include<stdlib.h>#include<vector>#include<iterator>#include"circle.h"#include"graph.h"#include"triangle.h"#include"rectangle.h"using namespace std;int main(){graph* c = new circle(22.3);graph* r = new rectangle(4.5,6.7);graph* t = new triangle(2.3,4.4,5.5);cout<<c->area()<<endl;cout<<r->area()<<endl;cout<<t->area()<<endl;vector<graph*> all;all.push_back(c);all.push_back(r);all.push_back(t);vector<graph*>::iterator ptr = all.begin();for(ptr;ptr != all.end();ptr++){cout<<(*ptr)->area()<<endl;cout<<(*ptr)->perimeter()<<endl;}system("pause");return 0;}
阅读全文
0 0
- 纯虚基类与虚函数的使用
- 多态与虚函数的使用
- 虚函数的概念与使用
- getsockname函数与getpeername函数的使用
- getsockname函数与getpeername函数的使用
- getsockname函数与getpeername函数的使用
- getsockname函数与getpeername函数的使用
- getsockname函数与getpeername函数的使用
- getsockname函数与getpeername函数的使用
- getsockname函数与getpeername函数的使用
- C++类的多态性与虚函数的使用
- C++:类的多态与虚函数的使用
- 函数与函数使用
- 函数指针与函数指针数组的定义与使用
- 函数指针与指针函数的使用与小结
- 函数指针与函数指针数组的定义与使用
- strcat()函数与strlen()函数与strcpy()的使用
- C++的get()函数与getline()函数使用与比较
- 解决Linux服务器时差问题
- Python面向对象的编程笔记
- JavaScript学习之Date对象
- c++容器——list
- mysql初学详解
- 纯虚基类与虚函数的使用
- Jackson将json字符串转换成泛型List,Map
- 职业规划之方法论
- 开发人员学Linux(8):CentOS7编译安装Subversion1.9.5及Apache2.4.25并集成
- 编码探讨: 该以什么编码打开"gb2312"文本?
- 第一次使用django开发网页遇到的问题
- html
- 关于ListView中CheckBox选择混乱的问题
- 五、Django项目中包含多个应用时对url的配置