1.C++11中已经有了final关键字:它的作用是指定类的虚函数不能被该类的继承类覆盖(override),或者是指定一个类成为一个不能被继承的类(final class)

2.派生类用调用基类的构造函数来初始化基类部分,若将基类构造函数声明为private,则实例化派生类成员时链接出错,但是这样基类也不能实例化,编译出错

3.将一个类的构造函数声明为private,则该类及其子类都不能实例化,但是若把子类声明为该类的友元,则该子类可以调用基类的private成员函数,也就是说此时子类可以实例化,而且这时候子类的子类也可以初始化,因为子类的子类初始化基类部分是调用子类的构造函数,而子类是可以正常初始化的,所以想到虚继承,子类虚继承自父类,子类的子类正常继承自子类,此时子类和子类的子类共用一个指针,该指针指向基类部分。

vitural base class 会在mosted derived class 中先被调用,然后在处于中间层的base class中抑制vitural base class的constructor,以保证virtual base class共享一份。如果少了virtual继承则是递归的调用constructor,就不能实现final的功能啦。<=最底层的派生类中会先调用virtual base class中构造函数,而不是递归调用直接基类的构造函数

class A
{
private:
A(){} friend class B;
}; class B : virtual A
{
}; class C : public B
{
}; void main()
{
B b;//ok
C c;//false
}

4.构造和析构任何一个设为私有都可以,然后提供一个或两个公有静态方法创建和销毁(只能在堆上创建对象)

class single
{
public:
static single* create()
{
return new single;
}
static void release(single *p)
{
delete p;
}
private:
single(){}
~single(){}
}; int main()
{
single *s = single::create();
single::release(s);
system("pause");
}

C++中设计一个类,使其不能继承的更多相关文章

  1. Object-C的类可以多重继承吗?可以实现多个接口吗?category是什么?重写一个类的方式用继承好还是分类好,为什么?

    Object-C的类可以多重继承吗?可以实现多个接口吗?category是什么?重写一个类的方式用继承好还是分类好,为什么? 答:Object-c的类不可以多重继承,可以实现多个接口(协议),Cate ...

  2. java中关于类的封装与继承,this、super关键字的使用

    原创作品,可以转载,但是请标注出处地址http://www.cnblogs.com/V1haoge/p/5454849.html. this关键字: this代表当前对象,它有以下几种用途: 1.本类 ...

  3. Java类与类的关系、继承与多态、重写与重载

    Java类与类的关系 (1)is-a包括了 继承,实现关系 (2)has-a包括了 关联,聚合,组合关系 (3)use-a包括了 依赖关系 实现关系: 实现指的是一个class类实现interface ...

  4. 为什么java中只允许继承一个类?

      一个类只能继承一个其他的类 在Java语言中禁止多重继承:一个类可以具有多个直接父类.多重继承不合法的原因是容易引发意义不明确.例如,有一个类C,如果允许它同时继承A类与B类(class C ex ...

  5. Pycharm 查看一个类的继承关系图

    Pycharm 查看一个类的继承关系图 在我们开发过程中: 无论是使用的开发框架自带的类, 还是我们自定义的类都特别多; 并且类之间单继承和多继承频繁使用, 这个继承,不仅仅是一级的继承关系,包括好几 ...

  6. java一个类 继承HttpServlet 和实现Servlet区别

    java一个类 继承HttpServlet 和实现Servlet区别 servlet 是一个接口,如果实现这个接口,那么就必须实现接口里面定义的所有方法 而HttpServlet实现了servlet接 ...

  7. IntelliJ IDEA 中如何查看一个类的所有继承关系(当前类的所有继承关系图)

    IntelliJ IDEA 中如何查看一个类的所有继承关系(当前类的所有继承关系图) .embody{ padding:10px 10px 10px; margin:0 -20px; border-b ...

  8. 【问题】多重继承时,super函数只初始化继承的第一个类,不初始化第二个类。

    class A(object): def __init__(self): print("init class A") class B(object): def __init__(s ...

  9. C++ //多继承语法 C++中允许一个类继承多个类

    1 //多继承语法 C++中允许一个类继承多个类 2 #include <iostream> 3 #include <string> 4 using namespace std ...

随机推荐

  1. [ Luogu 4626 ] 一道水题 II

    \(\\\) \(Description\) 求一个能被\([1,n]\) 内所有数整除的最小数字,并对 \(100000007\) 取模 \(N\in [1,10^8]\) \(\\\) \(Sol ...

  2. Linux系统资源监控--linux命令、nmon和spotlight

    前言: 系统资源监控一般监控系统的CPU,内存,磁盘和网络.系统分为windows和Linux.本篇主要记录Linux. Linux系统资源监控常用命令及工具 一.常用命令:top.free.iost ...

  3. NX自动出图 发布啦

    经过4个月的努力,终于面世啦!!!!1.安装文件 :http://yunpan.cn/Q49TWSJmy2i5Z    请下载后,按照“安装说明.txt ”进行安装!2.学习视频:http://yun ...

  4. Windows下80端口被进程System&PID=4占用的解决方法

    我的占用原因是 SQL Server Reporting Services,停止掉这个服务并设置其为手动启动即可 如果你并没有安装 SQL Server,请参考下文解决 =============== ...

  5. JS高级——文件操作

    https://www.cnblogs.com/mingmingruyuedlut/archive/2011/10/12/2208589.html https://blog.csdn.net/pl16 ...

  6. 8月中旬之后的学习计划 --- react

    这段时间快活了,放纵了,玩hi了,接下来该好好的学习新知识了. 鉴于目前业界比较火的前端js框架有react.vue,决定先从react开始学习.之前有简单的接触过它的一些基本的语法知识,这次准备全面 ...

  7. C# 绘图三种方式

    如果你想在窗体上进行绘画.通常会使用以下方法. 方法1,利用控件或窗体的paint事件中的painEventArgs private void form1_Paint(object sender, P ...

  8. Vue课程思维导图

  9. 02Struts2 环境搭建

    Struts2 环境搭建 1.下载 Apache Struts2 类库 2.建立web工程 3.配置web.xml <?xml version="1.0" encoding= ...

  10. [转载] kprobe原理解析(一)

    From: https://www.cnblogs.com/honpey/p/4575928.html kprobe原理解析(一) kprobe是linux内核的一个重要特性,是一个轻量级的内核调试工 ...