首页 > 解决方案 > 派生类嵌套在基类中 - C++

问题描述

我正在尝试将以下 JAVA 代码转换为 C++ 代码。但无法弄清楚如何。

abstract class Base {
   static class Derived extends Base {
      // attributes

      Derived(/*params list*/) {
        // code
      }


}

当我尝试执行以下操作时,编译器说Base直到右括号才完成。我知道事情的工作方式与 JAVA 不同,但我无法弄清楚如何在 C++ 中重现此代码。

class Base {
        class Derived: public Base{
        // attributes
        Derived(/* param list*/);
    };
 };

是否可以在 C++ 中做到这一点?也对非面向对象的方法开放。

标签: c++

解决方案


这是可以做到的。只需在 of 的主体中添加一个前向声明Base并将定义移到 的定义下方Base

class Base
{
    class Derived;
public:
    virtual ~Base() = default;
protected:
    Base() = default; // only allow initialization for subclasses to make this "abstract" without introducing a pure virtual function
};

class Base::Derived : public Base
{
    // attributes

    Derived(/*params list*/) {
        // code
    }
};

推荐阅读