C++ 学习笔记(一些新特性总结 2)
2016-01-17 13:50
711 查看
类成员变量初始化
C++ 11 中引入了一种简单的成员变量初始化方法,可以像普通变量一样初始化成员变量。[code]class Test { public: int a = 1; int b = 2, c = 3; };
类的特殊成员函数
包括构造函数、析构函数、拷贝构造函数、赋值操作。当我们没有具体给出这些特殊成员函数的实现时。C++ 编译器会替我们实现一个默认的版本。有时,这并不是我们需要 的。C++ 11 提供了一种机制,可以控制这些默认的函数是否生成。[code]class A { public: // Explicitly include default constructor A() = default; A(int i); // Disable copy constructor A(const A&) = delete; // Disable copy assignment operator A& operator=(const A&) = delete; };
下面来具体解释一下。
[code]A() = default;
告诉编译器替我们生成默认构造函数 A()。
[code]A(const A&) = delete; A& operator=(const A&) = delete;
则禁止编译器生成这两个函数。下面的例子禁止了无参数的构造函数。
[code]class B { public: B() = delete; B(int i): m_b(i) {}; int m_b; }; int main() { B b; // 这里会报错,我们阻止了编译器替我们生成默认构造函数 B c(10); // OK }
变量的初始化
C++ 11 中引入了一种统一的初始化语法,或者说扩展了原来只能初始化数组的 “{}”。这种语法可以初始化变量、数组、类对象。下面是个例子:[code]#include <string> #include <vector> using namespace std; int i { 1 }; string s {"Hello"}; int a[] { 1, 2 }; int *p= new int [2] { 1, 2 }; vector<string> box { "one", "two" }; // Call parameterless constructor MyClass b {}; // Call copy constructor MyClass c { b };
类成员变量的初始化也可以这样写:
[code]class Test { public: int a {1}; int b {2}, c = 3; };
delete 多个变量
这个其实不是 C++ 的新特性,应该在很早的版本中就支持了。但是我一直以为一个 delete 语句只能删除一个变量。下面是个例子。[code]int * a = new int; double * b = new double; int * c = new int[2]; double * d = new double [2] ; delete a, b; delete[] c, d;
派生类使用基类构造函数的新方法
C++ 11 中引入了一种新的语法:[code]class D2 : public B2 { public: using B2::B2; // inherit all constructors int y{0}; };
override 关键字
这个关键字我以前写过一篇博客。这里就不重复了。http://http://blog.csdn.net/liyuanbhu/article/details/43816371
final 关键字修饰虚函数
一旦一个虚函数被声明为final,派生类不能再重载它。[code]class Base { virtual void foo() final {} } class Derived { void foo() {} // error: Base::foo marked as final }
相关文章推荐
- 《Effective Modern C++》翻译--条款4:了解如何查看推导出的类型
- 《Effective Modern C++》翻译--条款4:了解如何查看推导出的类型
- 【LeetCode-258】Add Digits(C++)
- C++模板
- Accelerated C++ 习题答案
- C语言中控制printf的打印颜色实例及vt100的控制符文档-转
- 使用C语言计算utf-8字符串长度 和取子字符串-转
- C语言中怎么将变量名转换为字符串 -转
- C/C++ 远程开发 - NetBeans IDE 教程 -转
- C语言模拟按键
- ARM环境中的c语言socket进程通信-转
- thrift框架使用C++
- c语言定义变量的位置(By 紫贝殼)
- constexpr与常量表达式(c++11标准)
- ThriftUsageC++
- Sicily 1931. 卡片游戏
- C++开发人脸性别识别教程(12)——添加性别识别功能
- C++ 异常机制分析
- 在VS工程中,添加c/c++工程中外部头文件及库
- Sicily 4427. Greatest Common Divisors