C++ 学习笔记(一些新特性总结 2)

来源:互联网 发布:国防大学 知乎 编辑:程序博客网 时间:2024/04/29 17:47

类成员变量初始化

C++ 11 中引入了一种简单的成员变量初始化方法,可以像普通变量一样初始化成员变量。

class Test{public:    int a = 1;    int b = 2, c = 3;};

类的特殊成员函数

包括构造函数、析构函数、拷贝构造函数、赋值操作。当我们没有具体给出这些特殊成员函数的实现时。C++ 编译器会替我们实现一个默认的版本。有时,这并不是我们需要 的。C++ 11 提供了一种机制,可以控制这些默认的函数是否生成。

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;};

下面来具体解释一下。

A() = default;

告诉编译器替我们生成默认构造函数 A()。

A(const A&) = delete;A& operator=(const A&) = delete;

则禁止编译器生成这两个函数。下面的例子禁止了无参数的构造函数。

class B{public:    B() = delete;    B(int i): m_b(i) {};    int m_b;};int main() {    B b; // 这里会报错,我们阻止了编译器替我们生成默认构造函数    B c(10); // OK}

变量的初始化

C++ 11 中引入了一种统一的初始化语法,或者说扩展了原来只能初始化数组的 “{}”。这种语法可以初始化变量、数组、类对象。下面是个例子:

#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 constructorMyClass b {};// Call copy constructorMyClass c { b };

类成员变量的初始化也可以这样写:

class Test{public:    int a {1};    int b {2}, c = 3;};

delete 多个变量

这个其实不是 C++ 的新特性,应该在很早的版本中就支持了。但是我一直以为一个 delete 语句只能删除一个变量。下面是个例子。

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 中引入了一种新的语法:

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,派生类不能再重载它。

class Base{    virtual void foo() final {}}class Derived{    void foo() {} // error: Base::foo marked as final}
1 0
原创粉丝点击