假设我有一辆车,有引擎和 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();
}
}
使用NULL
、delete
等操作都与内存分配有关。对于这样的类,您通常应该分离关注点。内存分配(堆栈与堆)是一回事,对象是否处于正确状态是另一回事。
编辑:
如果你想让 Car
的状态依赖于 Engine
的状态,那么就这样做:
class Car {
Engine engine;
public:
bool isWorking() const { return !engine.isOverheated(); }
};
关于c++ - C++中的面向对象设计问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17483614/