在C++中禁止类继承

原创 2004年09月16日 09:34:00

下面的代码将会禁止继承:

class A;

class Lock {
 friend class A;
private:
 Lock() {}
};

class A :  virtual public Lock {
  // ...
public:
 A()
 {}
 A(int t)
 {}

};

现在,如果你尝试从类A派生其它类将会得到类似下面这样的编译错误。

class B : public A
{}; // Lock::Lock' : cannot access private member declared in class 'Lock'

    这是因为派生类都需要调用虚基类的构造函数,因此从A派生的B需要调用虚基类的构造函数(也就是Lock

的构造函数),而Lock的构造函数是私有的,类B又不是Lock的友元,所以这将会产生一个编译错误。
    如果我们移除类A派生时的virtual关键字,程序将会成功编译。这是因为在非虚拟继承中,任何类都可以

调用直接父类中的构造函数。因此,在非虚拟继承中,B将调用它的直接父类A的构造函数而A将调用它的直接父

类Lock的构造函数,这都是合法的。

在C++中禁止类继承

http://blog.csdn.net/wufanglove/下面的代码将会禁止继承:class A;class Lock { friend class A;private: Lock() {}};...
  • yangdelong
  • yangdelong
  • 2007年06月22日 10:33
  • 1209

friend virtual 在C++中禁止类继承

friend virtual 在C++中禁止类继承- - 转自: http://publishblog.blogchina.com/blog/tb.b?diaryID=218785 frien...
  • songshu5555
  • songshu5555
  • 2007年10月31日 00:11
  • 741

类(继承)的内存分配详解

1.基类与派生类的内存分配 派生类继承基类       内存分配时,是在于基类对象不同的内存地址处,按基类的成员变量类型,开辟一个同样的类型空间,但注意开辟后派生对象的空间,不是复制基类的成员的值...
  • vainlyhopelim
  • vainlyhopelim
  • 2015年08月18日 16:38
  • 1782

理解C++类的继承

本文讲述的是面向对象语言中类的继承的理解,文中以C++语言作为例子。 继承说明了类之间的层次结构的关系。C++中允许单继承,也允许多继承(一个类可以有多个基类) 类继承用一个冒号来表示,注意不要与作用...
  • xiahn1a
  • xiahn1a
  • 2014年12月05日 13:08
  • 1041

C++ primer:命名空间与多重继承

1.库倾向于定义许多全局名字——主要是模板名、类型名或函数名。在使用来这些名字中有一些几乎不可避免地会发自多个供应商的库编写应用程序的时候,生冲突,这种名字冲突问题称为命名空间污染问题。 2.命名空...
  • a81895898
  • a81895898
  • 2012年03月29日 19:46
  • 1969

C++类的3种继承方式

简单地说下C++类的3种继承方式,分别是public继承,protected继承,private继承。 最常用的还是public继承。class默认的是private继承,它的member如果没...
  • zuihoudebingwen
  • zuihoudebingwen
  • 2013年08月26日 15:23
  • 1005

C++模板类的继承1 :模板类继承模板类

大学时代旧作。       模板类的继承是C++中较为高级的一种用法,其语法与普通C++类的继承略有差别。本文实例演示了一个通过C++模板类继承实现排序算法的案例。代码如下: 1.   实现List基...
  • u011747351
  • u011747351
  • 2013年08月25日 13:53
  • 1220

C++--继承中的类模板语法

当模板遇上继承之后会发生什么呢? 写一个简单的测试案例来说明当模板与上继承发生的“”大事件“” #include using namespace std; template class A {...
  • sum_TW
  • sum_TW
  • 2016年12月08日 17:39
  • 2308

详细讲解C++ 类的继承

一个私有的或保护的派生类不是子类,因为非公共的派生类不能做基类能做的所有的事,就是指在公开场合,但是在类内部可以的一、引言在C++中,类是提供封装的逻辑单位,类的每一个对象都包含有描述其自身状态的数据...
  • ecitnet
  • ecitnet
  • 2008年01月23日 09:16
  • 16182

初步了解C++命名空间(加了继承)

//main.cpp #include #include "file4.h" using namespace std; using namespace A; using namespace...
  • sdgtliuwei
  • sdgtliuwei
  • 2014年10月08日 20:16
  • 759
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在C++中禁止类继承
举报原因:
原因补充:

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