当前位置:   article > 正文

c++初始化列表_initialize a list of number in c++

initialize a list of number in c++

目录

基本概念

自定义一个类如下:

初始化列表的意义:

 使用初始化列表原因:

格式:

使用注意:

 举例说明

const成员只能用初始化列表方式

 引用成员只能用初始化列表方式

成员变量初始化的顺序就是成员变量在类中的声明次序,与初始化列表中的先后次序无关 


基本概念

自定义一个类如下

成员属性为x, y, z

  1. class Thing{
  2. public:
  3. private:
  4. int x;
  5. int y;
  6. int z;
  7. };

初始化列表的意义:

对类的成员变量进行初始化;

 使用初始化列表原因

格式:

与其他函数不同,构造函数除了有名字,参数列表和函数体之外,还可以有初始化列表,初始化列表以冒号开头,后跟一系列以逗号分隔的初始化字段

  1. class foo
  2. {
  3. public:
  4. foo(string s, int i):name(s), id(i){} ; // 初始化列表
  5. private:
  6. string name ;int id ;
  7. };

使用注意:

  1. 每个成员变量在初始化列表中只能出现一次(初始化列表能只能初始化一次,多次初始化会报错);
  2. 类中包含以下成员,必须放在初始化列表位置进行初始化:
    引用成员变量
    const成员变量
    没有默认构造函数的自定义类型成员
  3. 尽量使用初始化列表初始化,因为不管你是否使用初始化列表,对于自定义类型成员变量,一定会先使用初始化列表初始化。
  4. 成员变量初始化的顺序就是成员变量在类中的声明次序,与初始化列表中的先后次序无关

 举例说明

const成员只能用初始化列表方式

  • 在构造函数中使用赋值语句初始化成员变量:

 程序运行结果:

  •  将成员属性x变为常量:const int x;此时使用构造函数赋值语句方式初始化,程序将报错;原因:常量是不允许被赋值的,即上述错误等同于:const  int x; a=5; 常量是不能先定义,再对其进行赋值的:错误代码如下:

 程序运行报错:

  •  针对上述类成员变量是常量的情况,只能使用初始化列表方式:

 程序运行结果:

 引用成员只能用初始化列表方式

  • 错误示范:使用构造函数赋值语句初始化类的引用变量;程序将报错;原因分析:x=a表示x是a的别名?不是,实际意思是给引用变量x赋值为a,但是此时x是谁的引用是不知道的;更无法进行赋值;

这种错误等同于:给引用x赋值,但此时x是没有指向的;

  •  正确方式:初始化列表方式为类的引用变量赋值;下列表示:x是a的引用;

  •  建议:在编写程序时,能用初始化列表方式时,尽量用这种方式;
  • 初始化列表方式,完整举例:

成员变量初始化的顺序就是成员变量在类中的声明次序,与初始化列表中的先后次序无关 

如下代码,类成员变量中先声明了_a2,再声明了_a1,因此初始化的顺序是先初始化_a2,再初始化_a1:

  1. #include <iostream>
  2. using namespace std;
  3. class A
  4. {
  5. public:
  6. A(int a)
  7. : _a1(a)
  8. , _a2(_a1)
  9. {}
  10. void Print()
  11. {
  12. cout << _a1 << " " << _a2 << endl;
  13. }
  14. private:
  15. int _a2;//先声明_a2
  16. int _a1;//后声明_a1
  17. };
  18. int main() {
  19. A aa(1);
  20. aa.Print();
  21. }

 先声明_a2就会先初始化_a2,用_a1初始化_a2,由于此时_a1还是随机值,因此_a2的值也是随机值,_a1使用a的值1进行初始化,因此,_a1的值为1:

 其他参考链接:c++中的初始化列表详解_小C博客的博客-CSDN博客_初始化列表

【C++】-- 初始化列表_玲娜贝儿~的博客-CSDN博客_初始化列表

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/382696
推荐阅读
相关标签
  

闽ICP备14008679号