C++点类、园类、圆柱类继承与多态

#include<iostream>
using namespace std;
class Point{
public:
    Point(float=0,float=0);
    void setPoint(float,float);
    float getX()const{return x;}
    float getY()const{return y;}
    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& cout,const Point& p){
    cout<<p.x<<" "<<p.y<<endl;
    return cout;
}

class Circle:public Point{
public:
    Circle(float=0,float=0,float=0);
    void setRadius(float);
    float getRadius()const{return radius;}
    float area()const;
    friend ostream& operator<<(ostream&,const Circle&);
protected:
    float radius;
};
Circle::Circle(float a,float b,float r):Point(a,b),radius(r){}
void Circle::setRadius(float r){
    radius=r;
} 
float Circle::area()const{
    return 3.14*radius*radius;
}
ostream& operator<<(ostream& cout,const Circle& c){
    cout<<c.radius<<" "<<c.x<<" "<<c.y<<endl;
    return cout; 
}

class Cylinder:public Circle{
public:
    Cylinder(float=0,float=0,float=0,float=0);
    void setHeight(float);
    float getHeight()const{return height;}
    float area()const;
    float volume()const;
    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.14*radius*height);
}
float Cylinder::volume()const{
    return height*Circle::area();
}
ostream& operator<<(ostream& cout,const Cylinder& cy){
    cout<<cy.x<<" "<<cy.y<<" "<<cy.radius<<" "<<cy.height<<endl;
}
void test01(){
    Circle c(1,1,2);
    cout<<c;
    c.setPoint(2,2);
    c.setRadius(3);
    cout<<c.getX()<<" "<<c.getY()<<" "<<c.getRadius()<<" "<<c.area()<<endl;
}
void test02(){
    //子类继承父类和爷爷类的成员属性和成员函数 
    Cylinder cy(1,1,2,3);
    cout<<cy;
    cy.setPoint(2,2);
    cy.setRadius(3);
    cy.setHeight(4);
    cout<<cy.getX()<<" "<<cy.getY()<<" "<<cy.getRadius()<<" "<<cy.getHeight()<<endl;
    cout<<cy.area()<<" "<<cy.volume()<<endl;
}
int main(){
    test02();
    return 0;
}
#include<iostream>
using namespace std;
class Shape{
public:
    virtual float area()const{return 0;}
    virtual float volume()const{return 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;}
    friend ostream& operator<<(ostream&,const Point&);
    virtual void shapeName()const{cout<<"Point"<<endl;}
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& cout,const Point& p){
    cout<<p.x<<" "<<p.y<<endl;
    return cout;
}


class Circle:public Point{
public:
    Circle(float=0,float=0,float=0);
    void setRadius(float);
    float getRadius()const{return radius;}
    virtual float area()const;
    virtual void shapeName()const{cout<<"Circle"<<endl;}
    friend ostream& operator<<(ostream&,const Circle&);
protected:
    float radius;
};
Circle::Circle(float a,float b,float r):Point(a,b),radius(r){}
void Circle::setRadius(float r){
    radius=r;
} 
float Circle::area()const{
    return 3.14*radius*radius;
}
ostream& operator<<(ostream& cout,const Circle& c){
    cout<<c.radius<<" "<<c.x<<" "<<c.y<<endl;
    return cout; 
}

class Cylinder:public Circle{
public:
    Cylinder(float=0,float=0,float=0,float=0);
    void setHeight(float);
    float getHeight()const{return height;}
    virtual float area()const;
    virtual float volume()const;
    virtual void shapeName()const{cout<<"Cylinder"<<endl;}
    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.14*radius*height);
}
float Cylinder::volume()const{
    return height*Circle::area();
}
ostream& operator<<(ostream& cout,const Cylinder& cy){
    cout<<cy.x<<" "<<cy.y<<" "<<cy.radius<<" "<<cy.height<<endl;
}

int main(){
    Shape *sp;
    Point p(1,1);
    Circle c(2,2,3);
    Cylinder cy(3,3,4,5);
    //利用多态可以方便地求出不同图形的面积和体积 
    sp=&p;
    sp->shapeName();
    cout<<sp->area()<<" "<<sp->volume()<<endl;
    sp=&c;
    sp->shapeName();
    cout<<sp->area()<<" "<<sp->volume()<<endl;
    c.setRadius(30);
    cout<<sp->area()<<" "<<sp->volume()<<endl;
    sp=&cy;
    sp->shapeName();
    cout<<sp->area()<<" "<<sp->volume()<<endl;
    cy.setRadius(40);cy.setHeight(50);
    cout<<sp->area()<<" "<<sp->volume()<<endl; 
    return 0;
}

原文链接: https://www.cnblogs.com/lyt888/p/12490699.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/194322

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月12日 下午6:39
下一篇 2023年2月12日 下午6:39

相关推荐