加入收藏 | 设为首页 | 会员中心 | 我要投稿 财气旺网 - 海宁网 (https://www.hainingwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

C++建立函数初始化列表

发布时间:2022-07-04 14:16:05 所属栏目:编程 来源:互联网
导读:构造函数的一项重要功能是对成员变量进行初始化,为了达到这个目的,可以在构造函数的函数体中对成员变量一一赋值,还可以采用初始化列表。 C++构造函数的初始化列表使得代码更加简洁,请看下面的例子: #include iostream using namespace std; class Stude
  构造函数的一项重要功能是对成员变量进行初始化,为了达到这个目的,可以在构造函数的函数体中对成员变量一一赋值,还可以采用初始化列表。
 
  C++构造函数的初始化列表使得代码更加简洁,请看下面的例子:
  #include <iostream>
  using namespace std;
  class Student{
  private:
      char *m_name;
      int m_age;
      float m_score;
  public:
      Student(char *name, int age, float score);
      void show();
  };
  //采用初始化列表
  Student::Student(char *name, int age, float score): m_name(name), m_age(age), m_score(score){
      //TODO:
  }
  void Student::show(){
      cout<<m_name<<"的年龄是"<<m_age<<",成绩是"<<m_score<<endl;
  }
  int main(){
      Student stu("小明", 15, 92.5f);
      stu.show();
      Student *pstu = new Student("李华", 16, 96);
      pstu -> show();
      return 0;
  }
  运行结果:
  小明的年龄是15,成绩是92.5
  李华的年龄是16,成绩是96
 
  运行结果:
  2130567168, 100
 
  在初始化列表中,我们将 m_b 放在了 m_a 的前面,看起来是先给 m_b 赋值,再给 m_a 赋值,其实不然!成员变量的赋值顺序由它们在类中的声明顺序决定,在 Demo 类中,我们先声明的 m_a,再声明的 m_b,所以构造函数和下面的代码等价:
  Demo::Demo(int b): m_b(b), m_a(m_b){
      m_a = m_b;
      m_b = b;
  }
  给 m_a 赋值时,m_b 还未被初始化,它的值是不确定的,所以输出的 m_a 的值是一个奇怪的数字;给 m_a 赋值完成后才给 m_b 赋值,此时 m_b 的值才是 100。
  obj 在栈上分配内存,成员变量的初始值是不确定的。

(编辑:财气旺网 - 海宁网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!