初始化列表的语法
类名(形参列表):成员一(值一),成员二(值二),...成员n(值n)
初始化列表
- 如果成员已经在初始化列表中,则不应该在构造函数中再次赋值
- 初始化列表和赋值有本质区别,如果成员是类,使用初始化列表调用的是成员类的拷贝构造函数,而赋值则是先创建成员类对象,然后在赋值。
- 初始化列表的括号中可以是具体的值,也可以是构造函数的形参名,还可以是表达式
- 如果成员是常量或者引用, 必须使用初始化列表,因为常量和引用只能在定义的时候,初始化。
- 如果成员是没有默认构造函数的类,则必须使用初始化列表
#include <iostream>
#include<string>
using namespace std;
class Person{
public:
string m_name;
int m_age;
//使用初始化列表初始化成员
Person():m_name("张三"),m_age(23) {
cout <<"调用了Person()默认构造函数"<<endl;
}
//使用初始化列表初始化成员
Person(string name, int age):m_name(name),m_age(age) {
cout <<"调用了Person()有参构造函数"<<endl;
}
//拷贝构造函数
Person(const Person& refPer) {
this->m_name = refPer.m_name;
this->m_age = refPer.m_age;
cout <<"调用了Person()拷贝构造函数"<<endl;
}
~Person() {
cout <<"调用了~Person()析构函数"<<endl;
}
void show() {
cout <<" 姓名:"<<m_name<<" 年龄:"<<m_age <<endl;
}
};
int main() {
Person per;
per.show();
Person per2("李四", 30);
per2.show();
return 0;
}
image.png
网友评论