C++11:类的改进
来源:互联网 发布:windows中安装ipython 编辑:程序博客网 时间:2024/06/01 08:47
继承构造
C++ 11允许派生类继承基类的构造函数(默认构造函数、复制构造函数、移动构造函数除外)。
#include <iostream>using namespace std;//基类class A{public: A(int x, int y) { a = x; b = y; }protected: int a; int b;};//派生类class B:public A{public:#if 0 //通过参数列表给基类构造函数传参 B(int x, int y): A(x, y) { }#endif //继承构造 using A::A; void display() { cout << "a = " << a << ", b = " << b << endl; } //没有增加新的成员变量 int tmp;};int main(){ //派生类对象 B obj(10, 20); obj.display(); return 0;}
注意:
- 继承的构造函数只能初始化基类中的成员变量,不能初始化派生类的成员变量
- 如果基类的构造函数被声明为私有,或者派生类是从基类中虚继承,那么不能继承构造函数
- 一旦使用继承构造函数,编译器不会再为派生类生成默认构造函数
委托构造
和继承构造函数类似,委托构造函数也是C++11中对C++的构造函数的一项改进,其目的也是为了减少程序员书写构造函数的时间。
如果一个类包含多个构造函数,C++ 11允许在一个构造函数中的定义中使用另一个构造函数,但这必须通过初始化列表进行操作,如下:
#include <iostream>using namespace std;class Test{public: //委托构造,一定要通过初始化列表方式 Test():Test(1, 'a') { } Test(int x): Test(x, 'b') { } Test(char x): Test(11, x) { } int a; char b;private: Test(int x, char y): a(x), b(y) { }};int main(){ //Test obj; // Test():Test(1, 'a') Test obj('z'); cout << obj.a << endl; cout << obj.b << endl; return 0;}
继承控制:final和override
C++11之前,一直没有继承控制关键字,禁用一个类的进一步衍生比较麻烦。
C++ 11添加了两个继承控制关键字:final和override。
final阻止类的进一步派生和虚函数的进一步重写:
//final阻止类的进一步派生,虚函数的进一步重写#if 0class A1 final //加上final,指定A1不能派生{ int a;};class A2: public A1 //err, 基类不能再派生了{};#endif//基类class B1{public: virtual void func() final {} //这是最终版本的虚函数,不能再重写};//派生类重写基类的虚函数class B2: public B1{public: //virtual void func() {} //err, 基类中的虚函数是最终版本,不能再重写};
override确保在派生类中声明的函数跟基类的虚函数有相同的签名:
class A1{public: //这是第一个虚函数,没有重写,不能用override修饰 virtual int func(int a) { }};class A2:public A1{public: //在重写虚函数地方,加上override, 要求重写的虚函数和基类一模一样 virtual int func(int b) override { }};
阅读全文
0 0
- C++11:类的改进
- 复数类的改进
- c++类的改进
- K&R C C90,C99的改进
- C语言的冒泡排序法改进
- C语言之改进的冒泡
- 以前的c#mvc框架改进 想法
- C语言的C11 标准有哪些改进的地方?C11 为何不如 C++11 流行?
- C++11:模板的改进
- 关于分页类的改进....
- 文件存取类的改进
- 一个改进的UBB类
- 一个改进的logger类
- 改进的hibernate工具类
- [转载]遗传算法改进的模糊C-均值聚类MATLAB源码
- [原创]:改进的相对完善的c内存池
- libgsc继续改进(c++).
- 改进的冒泡排序算法实现 (C#)
- 完美解决Linux sublime Text中文无法输入的问题
- python -- 装饰器的高级应用
- Mac上[ERROR] docker-cli docker ps failed
- NYOJ 733 万圣节派对
- 直接插入排序
- C++11:类的改进
- python itertools.chain 乘号* 实例
- ZOJ
- 2423: [HAOI2010]最长公共子序列
- Iowait的成因、对系统影响及对策
- .NET从入门到放弃之C#反射
- numpy中,矩阵的三种转置transpose、getT、getH的区别
- Openwrt学习笔记 通用固件 make menuconfig配置
- Android 关闭软键盘