C++的接口和重载<<运算符的小例子(试试把Circle的类的virtual的shapeName函数注释掉? )

来源:互联网 发布:蒙牛puremilk知乎 编辑:程序博客网 时间:2024/05/16 11:15


C++代码  参考谭浩强C++ 12章的12.4.3应用实例
////  Shape.h//  Shape////  Created by mac on 12-10-22.//  Copyright (c) 2012年 Roc. All rights reserved.//#ifndef Shape_Shape_h#define Shape_Shape_h#include<iostream>using namespace std;class Shape {//这就是C++的接口public:    virtual float area() const {return 0.0;}//输出一个图形的面积    virtual float volume() const {return 0.0;}//输出一个图形的体积    virtual void  shapeName () const = 0;//纯虚函数,打出自己的数据的接口        virtual ~Shape(){};};class Point: public Shape{public:    Point(float _x=0,float _y=0):x(_x),y(_y){}    void setPoint(float,float);    float getX() const{return x;}    float getY() const{return y;}         virtual void shapeName () const{        cout<<"Point:"<<(*this);    }        friend ostream & operator << (ostream & , const Point &);//        protected:    float x,y;};class  Circle: public Point{public:    Circle(float x=0.0,float y=0,float r=0):Point(x,y),radius(r){}    void setRadius(float r){radius = r;}    float getRadius() const{return radius;}        //求圆的面积    virtual float area() const{        return 3.14159*radius*radius;    }        virtual void shapeName() const{        cout<<"Circle:"<<(*this);    }        friend ostream & operator <<(ostream & ,const Circle &);//protected:    float radius;    };ostream& operator << (ostream & ostream, const Point & p){    ostream<<"["<<p.x<<","<<p.y<<"]"<<endl;    return ostream;}ostream & operator << (ostream & ostream, const Circle & c){    ostream<<"Center["<<c.x<<","<<c.y<<"],Radius:"<<c.radius<<endl;    return ostream;}#endif////  main.cpp//  Shape////  Created by mac on 12-10-22.//  Copyright (c) 2012年 Roc. All rights reserved.//#include <iostream>#include <iostream>#include "Shape.h"class TestShape{public:    static void  test1(){        Point  point(3.2,4.5);        Circle  circle(2.4,1.2,5.6);//        point.shapeName();//        circle.shapeName();//                Shape * pt;        pt=&point;        pt->shapeName();                pt=&circle;        pt->shapeName();        cout<<"circle area:"<<pt->area();            }        };int main(int argc, const char * argv[]){    TestShape::test1();    return 0;}



原创粉丝点击