C++对象初始化

对象初始化是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;
};

初始化列表的初始化顺序与成员声明顺序相同。

三、两种方式的比较

  1. 构造函数初始化是在函数体执行,初始化列表在创建对象时初始化。
  2. 初始化列表可以初始化常量和引用,构造函数不能。
  3. 初始化列表效率更高。

初始化示例:

# 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++中利用好初始化可以简化代码,提高效率,防止一些错误。构造函数和初始化列表各有应用场景,合理利用可以使对象初始化更加完善。