相关疑难解决方法(0)

在C++中防止类继承

最近我的一位朋友问我如何在C++中阻止类继承.他希望编译失败.

我在考虑它并找到了3个答案.不确定哪个是最好的.

1)私人建设者

class CBase
{

public:

 static CBase* CreateInstance() 
 { 
  CBase* b1 = new CBase();
  return b1;
 }

private:

 CBase() { }
 CBase(CBase3) { }
 CBase& operator=(CBase&) { }


};
Run Code Online (Sandbox Code Playgroud)

2)使用CSealed基类,私有ctor和虚拟继承

class CSealed
{

private:

 CSealed() {
 }

 friend class CBase;
};


class CBase : virtual CSealed
{

public:

 CBase() {
 }

};
Run Code Online (Sandbox Code Playgroud)

3)使用CSealed基类,受保护的ctor和虚拟继承

class CSealed
{

protected:

 CSealed() {
 }

};

class CBase : virtual CSealed
{

public:

 CBase() {
 }

};
Run Code Online (Sandbox Code Playgroud)

以上所有方法都确保不能继承CBase类.我的问题是:

1)哪种方法最好?还有其他方法吗?

2)除非CSealed类是虚拟继承的,否则方法2和3将不起作用.这是为什么 ?它与vdisp ptr有什么关系吗?

PS: …

c++ inheritance controls

56
推荐指数
4
解决办法
4万
查看次数

C++ - 嵌套类有什么意义?

我正在研究一些C++,现在我正在与Java对抗它的相似之处.我知道Java中内部类的目的,但现在我正在尝试在C++中使用嵌套类,并且我发现"容器"类的私有属性不是嵌套类可见的,所以为什么我应该使用它们呢?另外,有没有办法使这些属性可见?

c++ inner-classes

32
推荐指数
2
解决办法
6634
查看次数

标签 统计

c++ ×2

controls ×1

inheritance ×1

inner-classes ×1