读书人

关于c++禁止继承的有关问题

发布时间: 2012-03-27 13:44:24 作者: rapoo

关于c++禁止继承的问题
请问我用以下方法来实现c++中类的禁止继承是否正确呢?
class A
{
friend class B;
private:
A(){}
~A(){}
};

class B:virtual class A
{
};

class C:public B
{
};

禁止C继承B


[解决办法]
父类的构造函数为private时,就禁止继承了 。。。
[解决办法]
class B:virtual class A
{
};
这个virtual这是什么东西 ,好像还没听所过virtual继承

你不想让C继承B 那就不继承不就行了
我不明白你禁止继承是什么意思
[解决办法]
父类构造为private非常不好,那父类自己也不能实例化了。

[解决办法]
你这个B虚继承也是失败的吧
[解决办法]

探讨

引用:

父类的构造函数为private时,就禁止继承了 。。。


那就无法实例化了

[解决办法]
c++中有一个关键字:sealed
当你如下定以一个类时:
sealed class A
{
public:
A(){}
}

类A就不允许被继承了
[解决办法]
探讨

引用:

父类的构造函数为private时,就禁止继承了 。。。


那就无法实例化了

[解决办法]
或者也可以这样:

class B:private virtual class A
{
};

此时,类B也不可以被继承
[解决办法]
C/C++ code
#include <iostream>#include <stdlib.h>using namespace std;class Singleton{private:         Singleton()                                            // private构造函数         {                   cout << "Singleton::Constructor" << endl;         }          static Singleton* sg;                               // 私有静态变量,其类型为Singleton*                                                                     // 形如Singleton sg;这样的声明会出编译时错误public:         static Singleton* getInstance()                 // public成员函数getInstance()         {                   cout << "Singleton::getInstance" << endl;                   if(!sg)                   {                            sg = new Singleton();           // (1)在这个地方new了一个对象,但是在什么地方delete呢?                   }                    return sg;         }};Singleton* Singleton::sg = 0;int main(void){         Singleton *sg = Singleton::getInstance();          return 0;}
[解决办法]
http://blog.csdn.net/liuxizhiyi/article/details/3201128
[解决办法]
你这个就不但禁止继承 而且还禁止在栈上创建对象。
[解决办法]
http://www.cppblog.com/sunus/archive/2007/08/14/17532.html
[解决办法]
sealed是.net里面的吧??是不是需要托管才能用??

读书人网 >C++

热点推荐