首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

一个关于取什么为对象的有关问题,希望高手来解

2012-04-07 
一个关于取什么为对象的问题,希望高手来解。问题描述:一个半径为R的游泳池。游泳池边一个环形跑道。宽度为3跑

一个关于取什么为对象的问题,希望高手来解。
问题描述:
一个半径为R的游泳池。
游泳池边一个环形跑道。宽度为3
跑到边上一个半径为R+3的栅栏。

修建跑道每平米花费5。栅栏每米花费为4。

输入R求总费用。要求使用面向面向过程和面向对象两种方法。

面向过程的我已经解出来了。(很简单,这个题目不是考算法的)

面向对象我建立的是   游泳池(pool)   有一个半径R的属性。一个计算费用的方法(HowMuch),一个显示费用的方法(Show)。
但是老师说我的是错的   。   并给了提示   说   建立类   要能抽象出多个对象的共同特点。如果一个类只生成一个对象,那还不如用面向过程的   方法来实现。

希望高手来指点一下到底应该如何建立这个类。

[解决办法]
可能是你类的实现有具体,没有考虑别的情况吧,例如再加一圈草坪,要么就是改方形的游泳池,反正得可扩充。
[解决办法]
估计继承,多态什么的。
[解决办法]
封装、继承和多态是面向对象的根本哈。
[解决办法]
#include <iostream>

const double PI = 3.1415927;

class Arch
{
public:
virtual double CalcExpense(void) = 0;

protected:
static inline double sqr(double x) { return x * x; }
};

class Runway : public Arch
{
public:
explicit Runway(double r) : r_(r) {}
virtual double CalcExpense(void) { return (sqr(r_ + 3.0) - sqr(r_)) * PI * 5.0; }

private:
double r_;
};

class Guardrail : public Arch
{
public:
explicit Guardrail(double r) : r_(r) {}
virtual double CalcExpense(void) { return 2.0 * PI * 4.0 * r_; }

private:
double r_;
};

int main(void)
{
Arch *ArchArr[2];
const size_t ARCHARRSIZE = sizeof ArchArr / sizeof ArchArr[0];

std::cout < < "Input a number: ";
double r;
std::cin > > r;

Runway runway(r);
Guardrail guardrail(r + 3.0);
ArchArr[0] = &runway;
ArchArr[1] = &guardrail;

double sum = 0.0;
for (size_t i = 0; i < ARCHARRSIZE; ++i)
{
sum += ArchArr[i]-> CalcExpense();
}

std::cout < < "Total Expense: " < < sum < < std::endl;
return 0;
}


[解决办法]
设计一个类Circle,描述一个圆,看上去像这样
class Circle
{
public:
Circle (int R);

double Perimeter () const;
double Area () const;
};

很显然,可以用Circle来描述所有的东西
Circle pool(R);
Circle course(R+3);
Circle barrier(R+3);

总的费用为5 * (course.Area() - pool.Area()) + 4 * barrier.Perimeter()

热点排行
Bad Request.