02-6 初始化列表
作用:在类中初始化类中的属性。
c++提供了初始化列表语法,用来初始化属性。
语法:构造函数():属性1(数据值1),属性2(数据值2)...{}
注意冒号:
的位置:冒号位于构造函数形参列表的后面。
假设我们有这样的一个类:
class Person
{
private:
string m_name;
int m_age;
public:
void setname(string name)
{
m_name = name;
}
void setage(int age)
{
m_age = age;
}
string getname()
{
return m_name;
}
int getage()
{
return m_age;
}
};
在原来,我们初始化一个对象是这样的:
class Person p1;
p1.setname("张三");
p1.setage(18);
如果扩充一下,加上打印的命令:
int main()
{
class Person p1;
p1.setname("张三");
p1.setage(18);
cout << p1.getname() << endl;
cout << p1.getage() << endl;
return 0;
}
运行结果:(环境:Windows11(arm/Apple M VM)/Visual Studio 2022/Debug/arm64)
张三
18
但是有了初始化列表,我们就可以在定义一个类的时候这样定义:
class Person
{
private:
string m_name;
int m_age;
public:
void setname(string name)
{
m_name = name;
}
void setage(int age)
{
m_age = age;
}
string getname()
{
return m_name;
}
int getage()
{
return m_age;
}
Person():m_name("张三"), m_age(18)
{
}
};
省流量:比原来的多了一段这样的代码:
Person() :m_name("张三"), m_age(18)
{
}
这样运行一段这样的代码:
int main()
{
class Person p1;
cout << p1.getname() << endl;
cout << p1.getage() << endl;
return 0;
}
运行结果:(环境:Windows11(arm/Apple M VM)/Visual Studio 2022/Debug/arm64)
张三
18
当然,这样会比较死板,因为每一个的初始值被固定好了。我们也可以这样写:
Person(string name, int age) :m_name(name), m_age(age)
{
}
那么运行一段这样的代码:
int main()
{
string name = "李四";
int age = 51;
class Person p1(name, age);
cout << p1.getname() << endl;
cout << p1.getage() << endl;
return 0;
}
运行结果:(环境:Windows11(arm/Apple M VM)/Visual Studio 2022/Debug/arm64)
李四
51
:-)