c++学习记录构造函数成员变量的初始化

更新时间:2023-07-14 21:35:20 阅读: 评论:0

c++学习记录构造函数成员变量的初始化
在构造函数中对成员变量初始化的⽅法有俩种
⼀:在函数体中对成员变量⼀⼀赋值
⼆:采⽤初始化列表,下⾯是⼀个简单例⼦:
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:}
如本例所⽰,定义构造函数时并没有在函数体中对成员变量⼀⼀赋值,其函数体为空(当然也可以有其他语句),⽽是在函数⾸部与函数体之间添加了⼀个冒号:,后⾯紧跟m_name(name), m_age(age), m_score(score)语句,这个语句的意思相当于函数体内部的m_name = name; m_age = age; m_score = score;语句,也是赋值的意思
初始化列表可以⽤于全部成员变量,也可以只⽤于部分成员变量。下⾯的⽰例只对 m_name 使⽤初始化列表,其他成员变量还是⼀⼀赋值:
Student::Student(char *name, int age, float score): m_name(name){
m_age = age;
母乳喂养的姿势
m_score = score;
}
注意,成员变量的初始化顺序与初始化列表中列出的变量的顺序⽆关,它只与成员变量在类中声明的顺序有关
#include <iostream>
using namespace std;
class Demo{
private:
int m_a;
绝望
int m_b;
public:
Demo(int b);
void show();
};
Demo::Demo(int b): m_b(b), m_a(m_b){ }
厦门地图void Demo::show(){ cout<<m_a<<", "<<m_b<<endl; }
int main(){
Demo obj(100);
obj.show();
return0;
}
运⾏结果:
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 在栈上分配内存,成员变量的初始值是不确定的
构造函数初始化列表还有⼀个很重要的作⽤,那就是初始化 const 成员变量。初始化 const 成员变量的唯⼀⽅法就是使⽤初始化列表关于党的名言

本文发布于:2023-07-14 21:35:20,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1081605.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:变量   成员   函数   赋值
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图