[C++基础]037_编写不可被继承的类
2012-10-30 21:52
253 查看
1. 現実场景
在很多电影电视剧里,武功最高的往往是太监,所谓“欲练此功,必先自宫”,太监的武功为什么会这么高?我想应该是闲的。如果说面向对象的世界里有父子的话,那么太监这个类应该就是无法生子的类。他们是无法被继承的,不过,他们是可以继承别人的。
2. 技術問題
要实现一个无法被继承的类,Java为我们提供了一个关键字final,但是C++里没有,那作为C++程序员如何写出一个无法被继承的类呢?构造函数和析构函数。
为什么C++的构造函数和析构函数能够实现这点呢?因为C++的类继承里有一个规则,就是子类在实例化的时候,必须先调用父类的构造函数。对象销毁的时候,也必须调用父类的析构函数。所以如果我们能阻止子类调用父类的构造函数和析构函数就可以了。
那如何让一个类的构造函数和析构函数不被子类调用呢?private权限。是的,private权限的成员和函数都只能给类自己内部用。这样的话,就可以实现我们要的无法被继承的类了。
下面就看我们实现的代码是什么样的吧!
对Taijian类,如果你试图去继承它,那是通不过编译阶段的。
3. 补充
关于C++的类在发生继承时,它们的构造函数和析构函数的调用次序是怎样的呢?
构造函数:爷爷构造函数 → 父亲构造函数 → 儿子构造函数
析构函数:儿子析构函数 → 父亲析构函数 → 爷爷析构函数
在很多电影电视剧里,武功最高的往往是太监,所谓“欲练此功,必先自宫”,太监的武功为什么会这么高?我想应该是闲的。如果说面向对象的世界里有父子的话,那么太监这个类应该就是无法生子的类。他们是无法被继承的,不过,他们是可以继承别人的。
2. 技術問題
要实现一个无法被继承的类,Java为我们提供了一个关键字final,但是C++里没有,那作为C++程序员如何写出一个无法被继承的类呢?构造函数和析构函数。
为什么C++的构造函数和析构函数能够实现这点呢?因为C++的类继承里有一个规则,就是子类在实例化的时候,必须先调用父类的构造函数。对象销毁的时候,也必须调用父类的析构函数。所以如果我们能阻止子类调用父类的构造函数和析构函数就可以了。
那如何让一个类的构造函数和析构函数不被子类调用呢?private权限。是的,private权限的成员和函数都只能给类自己内部用。这样的话,就可以实现我们要的无法被继承的类了。
下面就看我们实现的代码是什么样的吧!
#include <iostream> using namespace std; class Taijian{ public: void publicFunc(){ } private: Taijian(){} ~Taijian(){} }; int main(){ return 0; }
对Taijian类,如果你试图去继承它,那是通不过编译阶段的。
3. 补充
关于C++的类在发生继承时,它们的构造函数和析构函数的调用次序是怎样的呢?
构造函数:爷爷构造函数 → 父亲构造函数 → 儿子构造函数
析构函数:儿子析构函数 → 父亲析构函数 → 爷爷析构函数
相关文章推荐
- [C++基础]037_编写不可被继承的类
- C++基础学习教程(七)----类编写及类的两个特性解析--->多态&继承
- C++基础学习教程(七)----类编写及类的两个特性解析--->多态&继承
- C++实现不可继承的类
- [C++]基础知识---类的公有、保护、私有继承
- C++设计及一个不可被继承的类
- [C++][基础概念](五)继承的学习
- C++语法基础--恢复继承成员的访问级别,默认继承保护级别,友元关系与继承,继承与静态成员
- LinuxC/C++编程基础(19) 不可复制类的原理及实现
- 在C++中实现不可继承的类
- C++基础学习10:继承
- 【c++语言基础】浅析C++继承与派生
- c++基础之继承
- C++基础(八)继承与派生——派生类成员的访问属性
- C++基础之--用VS编写第一个C++程序
- C++基础(十)继承与派生——多重继承
- C++基础——多继承问题
- C++语法基础--public,protected,private的继承方式及其访问性
- c++基础之继承
- 【C++学习笔记】继承与派生基础概念