美文网首页C++11新特性
C++11新特性(8)-类内初始化

C++11新特性(8)-类内初始化

作者: 面向对象思考 | 来源:发表于2018-06-03 14:52 被阅读2次

重复的初始化代码

考察下面的代码:

enum LineStyle{

   lsSolid,

   lsDash,

   lsDot,   

};

class Rect

{

public:

   Rect()

       :left{0}, top{0}, right{0}, bottom{}

       ,style{lsSolid}

   {

    }

   Rect(int l, int t, int r, int b)

       :left{l}, top{t}, right{r}, bottom{b}

       ,style{lsSolid}

   {

}

   Rect(int l, int t, int r, int b, LineStyle ls)

       :left{l}, top{t}, right{r}, bottom{b}

       ,style{ls}

   {

}

private:

   int top;

   int left;

   int right;

   int bottom;

   LineStyle style;   

};

这算是正常不过的代码,但是有一个不算是问题的问题:初期值为缺省值的数据包成员也需要在构造函数里指定,感觉不好。

类内初始化

C++11中引入了类内初始化器,以减少构造函数和初始化代码的数量。说起来挺玄,其实就是下面代码中背景加亮的部分。

class Rect

{

public:

   Rect(int l, int t, int r, int b)

       :left{l}, top{t}, right{r}, bottom{b}

   {

   }

   Rect(int l, int t, int r, int b, LineStyle ls)

       :left{l}, top{t}, right{r}, bottom{b}

       ,style{ls}

   {

   }

private:

   int top{0};

   int left{0};

   int right{0};

   int bottom{0};

   LineStyle style{lsSolid};   

};

类内初始化之后,构造函数只需要负责和缺省值不同的部分就好,代码精炼很多了。

作者观点

有人说,改善都是懒人发起的,作者认为:有一部改善应该是强迫症发起的。


觉得本文有帮助?请分享给更多人。

关注【面向对象思考】,轻松学习每一天!

面向对象设计,面向对象编程,面向对象思考!

相关文章

  • C++11新特性(8)-类内初始化

    重复的初始化代码 考察下面的代码: enum LineStyle{ lsSolid, lsDash, lsD...

  • 006 类内初始值

    C++11 的类内初始化允许非 static 成员的初始化,可以用{}或=号。构造函数的初始化列表 与 类内成员初...

  • c++11特性

    c++11特性 本次笔记记录一些常用的c++11特性,以方便查看。 1. 方便的列表快速初始化 2. 方便的aut...

  • 阿里巴巴面试题基础篇 C++11

    ● 请问C++11有哪些新特性? 参考回答: C++11 最常用的新特性如下: auto关键字:编译器可以根据初始...

  • 可怕的C++

    【C++11】新特性——引入nullprt huang_xw

  • 2021-04-18

    C++11新特性 auto可以从初始化表达式中推断出变量的类型,大大简化编程工作属于编译器特性,不影响最终的机器码...

  • C++11新特性(13)- 使用大括号包围的值列表赋值

    不止是初始化 本连载的第二篇文章说明了如何使用大括号包围的值列表来初始化变量。 C++11新特性(2)- 列表初始...

  • C++11:构造函数及类的初始化

    C++11:初始化 C++11中成员变量的初始化主要包括三类变量: 普通成员变量 常量 静态变量 静态常量 普通成...

  • C++11风格的新元素

    “C++11就像一门新的语言。” – Bjarne Stroustrup C++11标准推出了很多有用的新特性,本...

  • C++11 新特性之类型推断与类型获取

    以前我写过关于c++11新特性的第一部分,这是C++11新特性介绍的第二部分,涉及到C++11这次更新中较为重要的...

网友评论

    本文标题:C++11新特性(8)-类内初始化

    本文链接:https://www.haomeiwen.com/subject/vdujsftx.html