C++ 11仅允许继承某些类

jlc*_*lin 3 c++ inheritance c++11

我有一个基类,我想阻止大多数类的继承,但允许它为我可以硬编码的一些类.这可能在C++中?使用C++ 11更容易吗?

我想也许我会使用这个final参数,但这会阻止任何继承.

// This can be derived by anyone
class Base{
...
}

// This should only be derived by those I say can derive it
class Base2: public Base{
    protected:
         int SpecialVar;
}
Run Code Online (Sandbox Code Playgroud)

我想要这个的原因是有些类需要访问,SpecialVar而对其他类没有意义.所有类的功能仍然有意义Base.

Kla*_*aus 5

class X 
{   
    private:
        X() {}

        friend class D;
};  

class D: public X
{   
};  

class Y: public X // will fail, because it can't access X::X()
{   
};  
Run Code Online (Sandbox Code Playgroud)


小智 5

而不是让你的派生类成为朋友,另一种方式(根据你正在处理的具体类,可能有或没有意义),就是嵌套它们.

class Base {
    Base() { }
public:
    class Derived;
};

class Base::Derived : Base {
};

class CannotDerive : Base {
};

int main() {
    Base::Derived x; // ok
    CannotDerive y; // error
}
Run Code Online (Sandbox Code Playgroud)