c++ - 继承类型强制

标签 c++ inheritance

是否可以将继承强制设为公共(public)、私有(private)或 protected ?

即:

class block: public shape{ // Only way to inherit from shape
};

// class block: private shape{}; // throws an error

为了让事情更清楚:

  • 这不会在当前状态下导致错误
  • 我想要实现的目标是强制从 shape 派生的任何类都是公共(public)的。例如。如果一个类尝试从 shape 私有(private)继承,则会触发编译错误。

最佳答案

基类通常无法规定其派生类的接口(interface)。这样的约束似乎并不能解决任何问题,并且可以通过限制对派生类的访问来轻松解决“强制公开”问题。

例如,这里的Square提供了Shape的公共(public)接口(interface),但由于访问保护,任何人都无法访问Square

class SquaresAreAllMine {
private:
    class Square : public Shape {};
};

(声明虚拟函数的签名是一个异常(exception),因为派生类无法恢复到非虚拟状态。但这并不是真正的限制性意图。)

关于c++ - 继承类型强制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20591818/

相关文章:

.net - 为什么结构不支持继承?

c++ - 未命名的结构可以继承吗?

c++ - 指向成员对象的成员指针和声明顺序

c++ - 查找显示链表的错误

c++ - 为什么 OpenCL 无法将 enqueueReadBuffer 放入二维 vector 中?

c++ - 为什么要在 C++ 中为抽象类声明虚拟析构函数?

C# 泛型转换

c# - 面向对象 : Using Properties and Constructor

c++ - cpp/opengl 中的事件

c++ - x64 系统上的 win32 应用程序运行时错误(dll 加载),同时编译 0K