目录
一、初始化列表
概述:C++ 中的初始化列表是一种在创建对象时用于初始化其成员变量的特殊语法。它通常用于类的构造函数中,用于初始化类的成员变量,也可以用于数组和结构体。
语法:构造函数():属性1(值1),属性2(值2)... {}
初始化列表使用冒号(:
)后跟成员变量列表
实例:
#include <iostream>
using namespace std;
class Person
{
public:
传统方式初始化
//Person(int a, int b, int c) {
// m_A = a;
// m_B = b;
// m_C = c;
//}
//初始化列表方式初始化
Person(int a, int b, int c) :m_A(a), m_B(b), m_C(c) {}
void PrintPerson()
{
cout << "mA:" << m_A << endl;
cout << "mB:" << m_B << endl;
cout << "mC:" << m_C << endl;
}
private:
int m_A;
int m_B;
int m_C;
};
int main()
{
Person p(1, 2, 3);
p.PrintPerson();
return 0;
}
结果
mA:1
mB:2
mC:3
成员变量的初始化顺序与初始化列表中列出的变量的顺序无关,它只与成员变量在类中声明的顺序有关,如上类中定义的顺序为int m_A; int m_B; int m_C; 初始化列表的顺序不是这个也是安装这个顺序初始化赋值的。
如果成员变量的初始化依赖于其它成员变量,那么初始化顺序不同将导致不能正确的初始化。所以一般初始化列表尽量和类中定义顺序相同避免这种问题。
初始化列表可以用于全部成员变量,也可以只用于部分成员变量。如下只对 m_name 使用初始化列表,其他成员变量还是一一赋值:
Student::Student(char *name, int age, float score): m_name(name)
{
m_age = age;
m_score = score;
}
二、初始化常量成员
实例:
class MyClass
{
public:
MyClass(int a) : constVar(a)
{
// 构造函数的主体
}
private:
const int constVar;
};
-
常量成员变量必须在初始化列表中初始化,因为它们在对象创建后不能被修改。
-
如果在构造函数的主体中更改常量成员变量的值,将导致编译错误。
上一篇:C++构造函数详解
下一篇:C++析构函数详解