对象初始化是C++编程中非常重要的一个概念,它完成了对象的创建和初始化。本文将主要介绍C++中对象初始化的两种方式:构造函数初始化和初始化列表。
一、构造函数初始化
构造函数提供了一个初始化对象的方法。通过构造函数的参数和函数体,可以为对象的成员变量赋初始值:
# c++ www.itzhimei.com 代码演示
class Person {
public:
Person(string name, int age) {
this->name = name;
this->age = age;
}
private:
string name;
int age;
};
Person p("John", 18); // 通过构造函数初始化
构造函数灵活方便,可以重载多个构造函数用以初始化不同数据。
二、初始化列表初始化
初始化列表可以用于初始化类的常量成员变量以及引用类型成员,它放在构造函数参数后面:
# c++ www.itzhimei.com 代码演示
class Person {
public:
Person(): name("Unnamed"), age(0) { }
private:
const string name;
int age;
};
初始化列表的初始化顺序与成员声明顺序相同。
三、两种方式的比较
- 构造函数初始化是在函数体执行,初始化列表在创建对象时初始化。
- 初始化列表可以初始化常量和引用,构造函数不能。
- 初始化列表效率更高。
初始化示例:
# c++ www.itzhimei.com 代码演示
class A {
public:
A(): id(count++), name("Unnamed") {
// 初始化列表
}
void print() const {
// 构造函数体
}
private:
static int count;
int id;
const string name;
};
四、聚合初始化
C++还支持聚合类型的初始化列表初始化:
# c++ www.itzhimei.com 代码演示
struct Point {
int x;
int y;
};
Point p {1, 2}; // 聚合初始化
总结来说,在C++中利用好初始化可以简化代码,提高效率,防止一些错误。构造函数和初始化列表各有应用场景,合理利用可以使对象初始化更加完善。