gpt4 book ai didi

c++ - 与组合相比,为什么私有(private)继承会增加有人破坏我的代码的可能性?

转载 作者:太空宇宙 更新时间:2023-11-04 16:28:56 26 4
gpt4 key购买 nike

作者article指出

“通常你不想访问太多其他类的内部,私有(private)继承给了你一些额外的权力(和责任)。但私有(private)继承并不是邪恶的;它只是代价更高维护,因为它增加了有人更改会破坏您的代码的可能性。”

假设以下代码,其中 Car 私下继承自 Engine :

#include <iostream>
using namespace std;

class Engine
{
int numCylinders;
public:
class exception{};
Engine(int i) { if( i < 4 ) throw exception(); numCylinders = i; }
void start() { cout << "Engine started " << numCylinders << " cylinders" << endl; }
};

class Car : private Engine
{
public:
Car(int i) : Engine(i) {}
using Engine::start;
};

int main()
{
try
{
Car c(4);
c.start();
}
catch( Engine::exception& )
{
cout << "A Car cannot have less than 4 cylinders" << endl;
}
}

我的问题是:Car 如何通过设置其 Engine 少于 4 个汽缸、使用私有(private)继承且没有 protected 来破解此代码基类中的成员?

最佳答案

我认为问题不在于 Car 可以破解您的 Engine 代码,而是通过更改 Engine,有人可以破解您的 Car 代码。继承表示比组合更紧密的耦合,因此 Engine 中的更改更有可能破坏从它继承而不是包含它的类。在 C++ 的情况下,通过让 Car 包含一个 Engine 指针或智能指针来实现更松散的耦合。

关于c++ - 与组合相比,为什么私有(private)继承会增加有人破坏我的代码的可能性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9199113/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com