gpt4 book ai didi

c++ - 为什么我们实际上需要 C++ 中的 Private 或 Protected 继承?

转载 作者:IT老高 更新时间:2023-10-28 13:23:10 26 4
gpt4 key购买 nike

在 C++ 中,我想不出我想从基类:

class Base;
class Derived1 : private Base;
class Derived2 : protected Base;

真的有用吗?

最佳答案

当您想要访问基类的某些成员但又不想在类接口(interface)中公开它们时,它很有用。私有(private)继承也可以看作是某种组合:C++ faq-lite举个例子来说明这个说法

class Engine {
public:
Engine(int numCylinders);
void start(); // Starts this Engine
};

class Car {
public:
Car() : e_(8) { } // Initializes this Car with 8 cylinders
void start() { e_.start(); } // Start this Car by starting its Engine
private:
Engine e_; // Car has-a Engine
};

为了获得相同的语义,您还可以编写 car Class 如下:

class Car : private Engine {    // Car has-a Engine
public:
Car() : Engine(8) { } // Initializes this Car with 8 cylinders
using Engine::start; // Start this Car by starting its Engine
};

但是,这种做法有几个缺点:

  • 你的意图不太清楚
  • 这可能导致滥用多重继承
  • 它破坏了 Engine 类的封装,因为您可以访问其 protected 成员
  • 您可以覆盖 Engine 虚拟方法,如果您的目标是简单的组合,这是您不想要的东西

关于c++ - 为什么我们实际上需要 C++ 中的 Private 或 Protected 继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/374399/

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