Can I stop people deriving from my class?

原创 2007年09月11日 20:07:00
看了Bjarne Stroustrup's的FAQ Can I stop people deriving from my class?
下面总结一下,怎么样阻止派生一个类了,在Java中可以用final关键字,但是在C++中基本上通过下面二种方法:
方法一:
(下面代码在Visual 6.0+windows sp2在运行通过)
#include <iostream>
#include <string>
using namespace  std;

class Derive;

class Base
{
private:
    friend Derive;
    Base()
    {
    }
};

class Derive :public virtual  Base
{
public:
    Derive()
    {   
    }
};

class Test:public Derive
{
};

int main()
{
    Derive A1;
    //Test  A2; //error C2248: 'Base::Base' : cannot access private member declared in class 'Base'
    return 0;
}
其实不是阻止派生一个类,而是阻止了一个类的构造
方法二:
插入一个属性char ch[0];
#include <iostream>
#include <string>
using namespace  std;

class Base
{
public:
    Base()
    {
    }
private:
    char ch[0];
};

int main()
{
    Base A1;
    return 0;
}
虽然这种方法简单,但是存在一个缺点 编译时会警告warning C4200: nonstandard extension used : zero-sized array in struct/union

Can I stop people deriving from my class?

Yes, but why do you want to? There are two common answers: for efficiency: to avoid my function ...
  • steven216
  • steven216
  • 2007年02月12日 08:30
  • 388

things i learned from failing that you can avoid

Like any juicy breakup from our adolescence, entrepreneurs also crawl their way through similar stag...
  • hiramtan
  • hiramtan
  • 2013年04月19日 15:20
  • 676

LWC 59:731. My Calendar II

LWC 59:731. My Calendar II传送门:729. My Calendar IIProblem: Implement a MyCalendarTwo class to store...
  • u014688145
  • u014688145
  • 2017年11月19日 18:24
  • 653

真没有想到,还能在网上找到。感觉真好。

301、他易于满足。He is content with very little.302、早起三朝当一天。To get up early for three morning is equal to o...
  • whbtomt
  • whbtomt
  • 2010年04月18日 15:46
  • 1837

If I can stop one heart from brreaking

If I can stop one heart from brreaking               Emilu DickinsonIf I can stop one heart from bre...
  • Augusdi
  • Augusdi
  • 2010年03月14日 15:17
  • 952

How Can I Stop

  The fear of life is never gone away from my heart.But do it matter?It's the timing right to do the...
  • hckunique
  • hckunique
  • 2011年05月25日 23:52
  • 50

poj 2831 Can We Build This One?

POJ - 2831 Can We Build This One? Time Limit: 5000MS   Memory Limit: 65536KB   64bit IO Format...
  • miaomiao_ymxl
  • miaomiao_ymxl
  • 2016年08月30日 20:50
  • 272

Hanoi Tower Troubles Again! (找规律)

Description People stopped moving discs from peg to peg after they know the number of steps neede...
  • h1021456873
  • h1021456873
  • 2016年02月27日 19:33
  • 408

IELTS11 Test2 laws are needed to make people recycle more of their waste

IELS11 TEST2 的一篇作文,我的观点是,政府应该立法,但是在立法的同时,应该保证法律的有效实施,然后加强宣传,特别是针对年长的人,只要人人作出一点改变,这个社会就会变得更好。 Topic  ...
  • w5688414
  • w5688414
  • 2017年08月12日 19:50
  • 521

731. My Calendar II

731. My Calendar II 题目描述:Implement a MyCalendarTwo class to store your events. A new event can be ad...
  • mupengfei6688
  • mupengfei6688
  • 2017年11月28日 15:45
  • 182
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Can I stop people deriving from my class?
举报原因:
原因补充:

(最多只允许输入30个字)