JZ-C-48

Posted 回看欧洲

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JZ-C-48相关的知识,希望对你有一定的参考价值。

剑指offer第四十八题:不能被继承的类:用C++设计一个不能被继承的类(如C#里关键字Sealed,Java里关键字final)

 1 //============================================================================
 2 // Name        : JZ-C-48.cpp
 3 // Author      : Laughing_Lz
 4 // Version     :
 5 // Copyright   : All Right Reserved
 6 // Description : 不能被继承的类:用C++设计一个不能被继承的类(如C#里关键字Sealed,Java里关键字final)
 7 //============================================================================
 8 
 9 #include <iostream>
10 using namespace std;
11 
12 // ====================方法一:把构造函数设为私有函数====================
13 class SealedClass1 {
14 public:
15     static SealedClass1* GetInstance() {
16         return new SealedClass1();
17     }
18 
19     static void DeleteInstance(SealedClass1* pInstance) {
20         delete pInstance;
21     }
22 
23 private:
24     SealedClass1() {//private
25     }
26     ~SealedClass1() {//private
27     }
28 };
29 
30 // 如果试图从SealedClass1继承出新的类型,
31 // 将会导致编译错误。
32 /*
33  class Try1 : public SealedClass1
34  {
35  public:
36  Try1() {}
37  ~Try1() {}
38  };
39  */
40 
41 // ====================方法二:利用虚拟继承virtual====================
42 template<typename T> class MakeSealed {
43     friend T;//友元类
44 
45 private:
46     MakeSealed() {
47     }
48     ~MakeSealed() {
49     }
50 };
51 
52 class SealedClass2: virtual public MakeSealed<SealedClass2> {//
53 public:
54     SealedClass2() {
55     }
56     ~SealedClass2() {
57     }
58 };
59 
60 // 如果试图从SealedClass1继承出新的类型,
61 // 将会导致编译错误。
62 /*
63  class Try2 : public SealedClass2
64  {
65  public:
66  Try2() {}
67  ~Try2() {}
68  };
69  */
70 
71 int main(int argc, char** argv) {
72     return 0;
73 }

 

以上是关于JZ-C-48的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段——CSS选择器

谷歌浏览器调试jsp 引入代码片段,如何调试代码片段中的js

片段和活动之间的核心区别是啥?哪些代码可以写成片段?

VSCode自定义代码片段——.vue文件的模板

VSCode自定义代码片段6——CSS选择器

VSCode自定义代码片段——声明函数