zoukankan      html  css  js  c++  java
  • 编写不可被继承的类

       1. 現実场景

        在很多电影电视剧里,武功最高的往往是太监,所谓“欲练此功,必先自宫”,太监的武功为什么会这么高?我想应该是闲的。如果说面向对象的世界里有父子的话,那么太监这个类应该就是无法生子的类。他们是无法被继承的,不过,他们是可以继承别人的。

       2. 技術問題

        要实现一个无法被继承的类,Java为我们提供了一个关键字final,但是C++里没有,那作为C++程序员如何写出一个无法被继承的类呢?构造函数和析构函数。

        为什么C++的构造函数和析构函数能够实现这点呢?因为C++的类继承里有一个规则,就是子类在实例化的时候,必须先调用父类的构造函数。对象销毁的时候,也必须调用父类的析构函数。所以如果我们能阻止子类调用父类的构造函数和析构函数就可以了。

        那如何让一个类的构造函数和析构函数不被子类调用呢?private权限。是的,private权限的成员和函数都只能给类自己内部用。这样的话,就可以实现我们要的无法被继承的类了。

        下面就看我们实现的代码是什么样的吧!

    复制代码
     1 #include <iostream>
     2 using namespace std;
     3 
     4 class Taijian{
     5 public:
     6      void publicFunc(){
     7 
     8      }
     9 
    10 private:
    11     Taijian(){}
    12     ~Taijian(){}
    13 };
    14 
    15 int main(){
    16     return 0;
    17 }
    复制代码

        对Taijian类,如果你试图去继承它,那是通不过编译阶段的。不过,这个类现在谁也不能使用了,需要在类中添加一个静态函数,让这个静态函数返回一个这种类的对象,这样才能使用这个类。

       3. 补充

        关于C++的类在发生继承时,它们的构造函数和析构函数的调用次序是怎样的呢?

        构造函数:爷爷构造函数 → 父亲构造函数  → 儿子构造函数

        析构函数:儿子构造函数 → 父亲构造函数  → 爷爷构造函数

  • 相关阅读:
    1143 Lowest Common Ancestor (30)
    PAT 1135 Is It A Red-Black Tree
    PAT 1119 Pre- and Post-order Traversals
    1102 Invert a Binary Tree(25 分)
    PAT总结
    c++ getline的用法
    PAT 1049 Counting Ones (30)
    PAT 1022 Digital Library (30)
    java jar包
    NIO的理解
  • 原文地址:https://www.cnblogs.com/langqi250/p/2747156.html
Copyright © 2011-2022 走看看