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