博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[C++基础]037_编写不可被继承的类
阅读量:5248 次
发布时间:2019-06-14

本文共 860 字,大约阅读时间需要 2 分钟。

 

   1. 現実场景

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

   2. 技術問題

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

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

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

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

1 #include 
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++的类在发生继承时,它们的构造函数和析构函数的调用次序是怎样的呢?

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

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

转载于:https://www.cnblogs.com/xiao-wei-wei/archive/2013/03/20/2971607.html

你可能感兴趣的文章
hihoCoder 1233 : Boxes(盒子)
查看>>
codeforces水题100道 第二十二题 Codeforces Beta Round #89 (Div. 2) A. String Task (strings)
查看>>
c++||template
查看>>
[BZOJ 5323][Jxoi2018]游戏
查看>>
编程面试的10大算法概念汇总
查看>>
Vue
查看>>
条件断点 符号断点
查看>>
水平垂直居中
查看>>
MySQL简介
查看>>
设计模式之桥接模式(Bridge)
查看>>
jquery的$(document).ready()和onload的加载顺序
查看>>
Python Web框架Django (五)
查看>>
.net学习之继承、里氏替换原则LSP、虚方法、多态、抽象类、Equals方法、接口、装箱拆箱、字符串------(转)...
查看>>
【codevs1033】 蚯蚓的游戏问题
查看>>
【程序执行原理】
查看>>
python的多行注释
查看>>
连接Oracle需要jar包和javadoc文档的下载
查看>>
UVA 10976 - Fractions Again?!
查看>>
Dreamweaver cc新版本css单行显示
查看>>
【android】安卓的权限提示及版本相关
查看>>