c++ - C++中的面向对象设计问题

标签 c++ oop object-oriented-analysis

假设我有一辆车,有引擎和 radio 。我想在发动机启动时启动 radio ,并希望在发动机超过一定温度时摧毁汽车。在 Thinking in C++ 一书中,有一个组合示例帮助了我。我的想法是相似的:

class Engine
{
public:
    int temperature;
    void start()
    {
        temperature = 15
    }

    void rev()
    {
        temperature += 2;
    }
}

class Radio
{
public:
    void open() {}
}

class Car
{
public:
    ~Car();
    Engine engine;
    Radio radio;
}

我知道我可以手动实现:

main()
{
    Car car;
    car.engine.start();
    car.radio.open();
    while(car != NULL)
    {
        car.engine.rev();
        if(car.engine.temperature > 50)
        {
            delete(&car);
        }
    }
}

我可能有语法错误,这不重要。我的问题是:如何自动创建类之间的所有通信,以便

main()
{
    Car car;
    while(car!= NULL)
    {
        car.engine.rev();
    }

做同样的工作?我也尝试过继承和虚函数来创建通信,但失败了。

最佳答案

您似乎混淆了几个问题。首先,您说您想要从自身中删除 一个类。这通常不是一个好主意。

这里的关键是分配和释放内存以及拥有有效对象之间存在差异。您可以在您的类中有一个 bool overheated 变量,当 Car 过热时,您将其设置为 true。然后你的循环看起来像这样:

class Engine {
private:
    bool overheated;
public:
    bool isOverheated() const { return overheated; }
    void rev();

    // Rest of implementation ...
};

void Engine::rev() {
    temperature += 2;
    if (temperature > 50) overheated = true; 
}

class Car { /* ... */ };

int main() {
    Car car;
    while (!car.engine.isOverheated()) {
        car.engine.rev();
    }
}

使用NULLdelete等操作都与内存分配有关。对于这样的类,您通常应该分离关注点。内存分配(堆栈与堆)是一回事,对象是否处于正确状态是另一回事。

编辑:

如果你想让 Car 的状态依赖于 Engine 的状态,那么就这样做:

class Car {
    Engine engine;
public:
    bool isWorking() const { return !engine.isOverheated(); }
};

关于c++ - C++中的面向对象设计问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17483614/

相关文章:

python - 用于最小内存开销的最佳 GUI 制造商

c++ - 这个错误是什么意思 : variable-size type declared outside of any function

java - 如果一个类没有状态,所有的方法都应该是静态的吗?

java - 在面向对象编程中创建 Action

c++ - 我该如何调用这个函数?

c++ - 如何在 3D 空间中正确移动相机?

php - 尝试构建一个静态数据库类,我可以从类外的任何函数访问它

oop - 为什么 java.util.Scanner 类声明为 'final' ?

design-patterns - 是否建议从该抽象类中的方法调用抽象方法

java - 事务可以是一个类吗?