C++中不可继承的类

2009-08-24 22:43 | 分类:C/C++, 原创, 编程语言 | 标签:, | 作者:Aaron | 165 views

如何让C++中的类变得不可继承呢?最笨的办法就是人为约定喽~呵呵~再仔细想一想可能会想到如下用法:

class A
{
private:
    A(){}
public:
    static A * Create();
};

这有点像singleton的使用方法,但是这种模式用在不可继承的类上面就显得有点不伦不类了。我甚至还见有人用template来实现这个,真是鸡肋鸡肋。。。下面介绍两种方法,个人觉得还是比较漂亮的~(以下代码就懒的讲解了,大家自己看吧)

class COrphanTag
{
protected:
    COrphanTag(){}
};
 
class COnly : private virtual COrphanTag
{
public:
    COnly(){}
};
 
class CMore : public COnly
{
public:
    CMore(){}
};
 
int main(void)
{
    COnly only;
    return 0;
}

但是这个程序在VC6下是可以正常编译通过的,哎,没办法,必须顺着微软来啊,那我们再改改:

class COnly;
class COrphanTag
{
private:
    COrphanTag(){}
    friend class COnly;
};
 
class COnly : private virtual COrphanTag
{
public:
    COnly(){}
};
class CMore : public COnly
{
public:
    CMore(){}
};
 
int main(void)
{
    COnly only;
    return 0;
}

嗯,这样就可以了,大家都能成功的报错了吧~但是如果有人使用如下的多继承那就无语了:

class CMore : public COnly, public virtual COrphanTag
{
public:
    CMore(){}
};

毕竟C++没有JAVA中final那种东西啊。。。

发表您的评论

您的名字:

您的邮箱: (*不会被公布

您的网站: