函数的多态性以及虚函数
生活随笔
收集整理的這篇文章主要介紹了
函数的多态性以及虚函数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
包含一個及一個以上的純虛函數的類就是抽象基類,抽象基類沒有也不能必要定義對象。
**#include <iostream> using namespace std; class Shape { public:virtual float area() const {return 0.0;}//虛函數virtual float volume() const {return 0.0;} //虛函數virtual void shapeName() const =0; //聲明一個純虛構函數//說明存在純虛構函數的基類不能夠定義對象,多以只能為抽象類 }; /////////////////////////////////////////////////////////////////////////////////////////////////// class Point :public Shape { public:Point(float=0,float=0); //定義構造函數void setPoint(float,float);float getX() const {return x;}float getY() const {return y;}virtual void shapeName() const{cout<<"Point";} //對純虛函數進行重新定義,以便實現函數的多態性friend ostream & operator<<(ostream &,const Point &); protected:float x,y;}; Point::Point(float a,float b) {x=a; y=b; } void Point::setPoint(float a, float b) {x=a;y=b;} ostream & operator <<(ostream & output,const Point &p) {output<<"["<<p.x<<","<<p.y<<"]";return output; } class Circle:public Point { public:Circle(float x=0,float y=0,float r=0); //聲明構造函數void setRadius(float);float getRadius() const;virtual float area() const;virtual void shapeName() const {cout<<"Circle:";} //對虛函數進行再定義friend ostream &operator<<(ostream &,const Circle &); //重定義,第二個參數是對Circle常數據成員的引用 protected:float radius;}; Circle::Circle(float x, float y, float r):Point(x,y),radius(r) {} //函數初始化列表對函數進行初始化void Circle::setRadius(float r) {radius=r; }float Circle::getRadius() const {return radius;} float Circle::area() const {return 3.14159*radius*radius; } ostream &operator<<(ostream &output,const Circle &c) {output<<"["<<c.x<<","<<c.y<<"],r="<<c.radius;return output; } //聲明Cylinder類 class Cylinder:public Circle { public:Cylinder(float x=0,float y=0,float r=0,float h=0);void setHeight(float);virtual float area() const;virtual float volume() const;virtual void shapeName() const {cout<<"Cylinde:";} //對虛函數進行重定義friend ostream& operator<<(ostream&,const Cylinder &);protected:float height;}; Cylinder::Cylinder(float a, float b, float r, float h):Circle(a,b,r),height(h) {} void Cylinder::setHeight(float h) {height=h;} float Cylinder::area() const {return 2*Circle::area()+2*3.14159*radius*height;} float Cylinder::volume() const {return Circle::area()*height;} ostream &operator<<(ostream &output,const Cylinder& cy) {output<<"["<<cy.x<<","<<cy.y<<"],r="<<cy.radius<<",h="<<cy.height;return output;} int main() {Point point(3.2,4.5);Circle circle(2.4,1.2,5.6);Cylinder cylinder(3.5,6.4,5.2,10.5);point.shapeName();cout <<point<<endl;circle.shapeName();cout<<cylinder<<endl<<endl;cylinder.shapeName();cout<<cylinder<<endl<<endl;Shape *pt;pt=&point;pt->shapeName();cout<<"x="<<point.getX()<<"y="<<point.getY()<<"\narea"<<pt->area()<<"\nvolume="<<pt->volume()<<"\n\n";pt=&circle;pt->shapeName();cout<<"x="<<circle.getX()<<",y="<<circle.getY()<<"\narea="<<pt->area()<<"\nvolume="<<pt->volume()<<"\n\n";pt=&cylinder;cout<<"x="<<cylinder.getX()<<",y="<<cylinder.getY()<<"\narea="<<pt->area()<<"\nvolume="<<pt->volume()<<"\n\n";return 0; } **總結
以上是生活随笔為你收集整理的函数的多态性以及虚函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据资产标准研究进展与建议
- 下一篇: 作者:刘阳(1988-),男,军事医学科