圆的类的设计,感觉小弟我的类比书上的要繁琐

圆的类的设计,感觉我的类比书上的要繁琐。
  一圆形游泳池,现在需要在其周围建一圆形过道,并在其四周上栅栏. 
栅栏价格为35元/米,过道造价为20元/平方米.过道宽度为3米,游泳池半径 
由键盘输入.要求变成计算并输出过道和栅栏的造价.
我的思路是这样的。
  
#include<iostream>
using namespace std;
#define PI 3.1415926
#define CONCRETE_PRICE 20
#define FENCE_PRICE 35

//圆类的定义
class Circle{
public:
Circle() //默认构造函数
{
r=1;
compute();
}
Circle(float r) //带参数的构造函数
{
this->r=r;
}

float GetC(); //外界接口,获取圆的周长成员函数
float GetS(); //外界接口,获取圆的面积成员函数
void SetR(float); //外界接口,设置圆的半斤函数
private:
float r,s,c;
void compute();//计算圆的周长和面积
};

void Circle::compute()
{
s=PI*r*r;
c=2*PI*r;
}

void Circle::SetR(float r)
{
this->r=r;
}

float Circle::GetS()
{
compute();
return s;
}

float Circle::GetC()
{
compute();
return c;
}

int main()
{
float r,price;
Circle yuan1; //声明对象圆1
Circle  yuan2; //声明对象圆2
cout<<"请输入小圆的半斤\n";
cin>>r;
yuan1.SetR(r);
r+=3; //大圆的半径等于小圆的半斤加3
yuan2.SetR(r);
price=(yuan2.GetC()-yuan1.GetC())*FENCE_PRICE;
cout<<"过道价格为="<<price<<endl;
price=(yuan2.GetS()-yuan1.GetS())*CONCRETE_PRICE;
cout<<"栅栏价格为="<<price<<endl;

return 0;
}

而书上设计的类私有成员就只有半径,而我的类有周长和面积,半径还有一个就是函数。是不是我的类设计得太罗嗦了。
设计 对象

------解决方案--------------------
这就是个作业,明白原理就可以。掌握了方法可以举一反三。

你要是闲着没事再加一点比如金额的单位是人民币还是美刀,栅栏有多高,或者你今天心情好不好的都可以。
------解决方案--------------------
你的面积和周长是在构造函数中计算的,如果重新设置了半径,你的周长和面积就是无效数据了。
周长和面积都是依赖半径的,在取得时候算就可以了。不然就要在每次设置半径时重新计算。
------解决方案--------------------
半径,面积,周长三个量不是独立的,除非你能始终保持他们的同步,否则如果你单独改了一个就是错误了。