接上面
class Shape
{
public:
Shape(double x,double y){xCoord=x,yCoord=y;}
virtual double Area() const{return 10.0;}//有什么作用
protected:
double xCoord,yCoord;
};
class Circle:public Shape
{
public:
Circle(double x,double y,double r):Shape(x,y),radius(r){}
double Area() const{return 3.14*radius*radius;}//有什么作用
protected:
double radius;
};
class Rectangle:public Shape
{
public:
Rectangle(double x1,double y1,double x2,double y2):Shape(x1,y1),x2Coord(x2),y2Coord(y2){}
double Area() const{return fabs((xCoord-x2Coord)*(yCoord-y2Coord));} //const有什么作用
protected:
double x2Coord,y2Coord;
};
void fun(Shape &s)
{
cout<<s.Area()<<endl;
}
那表示该函数不会修改类的数据成员,所以常量对象可以安全调用该函数,如果去掉,就无法被常量对象调用了
还有一点 在类的成员函数中 const 需要加在 函数声明和定义之间
如果你的定义在类体外 那么 const 需要在函数 double Area() 声明后 定义的时候也需要加const
1.只有被声明为 const的成员函数才能被一个const类对象调用
2.修改类数据成员的函数声明为const是非法的.
3.任意一个类如果被广泛使用 ,就应该把那写不修改类数据成员的成员函数声明为const (const何时使用)
4.const成员函数 可以被相同参数表的非const成员函数重载
以上引用 primer c++ 3tr p517.