【C++学习】第六章多态与虚函数案例实现

#include
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;
};

class Circle:public Point{
    public:
    Circle(float x=0, float y=0,float r=0);
    void setRedius(float);
    float getR() const{return radius;}
    
    virtual void shapeName() const {
        cout << "Circle:";
    }
    float area() const;
    friend ostream & operator << (ostream &, const Circle &);
    protected:
    float radius;
};

class Cylinder:public Circle{
    public:
    Cylinder(float x=0, float y=0,float r=0,float h=0);
    void setHeight(float);
    float getHeight() const{return height;}
    
    virtual void shapeName() const {
        cout << "Cylinder:";
    }
    float area() const;
    float volume() const;
    friend ostream & operator << (ostream &, const Cylinder &);
    protected:
    float height;
};
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="<shapeName();
    cout << "x=" << point.getX() <<",y=" << point.getY() << "\n area=" << pt->area() <<"\n volumn="<volume() << "\n\n";
    pt = &circle;
    pt->shapeName();
    cout << "x=" << circle.getX() <<",y=" << circle.getY() << ",r=" << circle.getR() <<"\n area=" << pt->area() <<"\n volumn="<volume() << "\n\n";

    pt = &cylinder;
    pt->shapeName();
    cout << "x=" << cylinder.getX() <<",y=" << cylinder.getY() << ",r=" << cylinder.getR() <<"\n area=" << pt->area() <<"\n volumn="<volume() << "\n\n";
}

虚函数的作用就是为了实现多态,和php的延时绑定是一样的。
函数重载是静态的,在横向上的功能, 虚函数是类继承上的功能,是动态的。

你可能感兴趣的:(C++,c++,学习,开发语言)