C++如何定义和使用一个类(Class)?(构造函数示例)

C++中类由class关键字定义,含私有数据成员和公有成员函数,构造函数名与类名相同、无返回类型,用成员初始化列表高效初始化;可重载、委托或设默认参数。

在C++中定义一个类,就是用 class 关键字声明一组相关数据(成员变量)和操作这些数据的函数(成员函数),其中构造函数用于初始化对象。

定义类的基本结构

类通常包含私有(private)数据成员和公有(public)成员函数。例如定义一个表示学生的类:

class Student {
  private:
    std::string name;
    int age;
  public:
    Student();              // 默认构造函数
    Student(std::string n, int a); // 带参构造函数
    void display() const;
};

实现构造函数

构造函数名必须与类名完全相同,没有返回类型(连 void 也不能写)。它在创建对象时自动调用:

Student::Student() : name("Unknown"), age(0) {}

Student::Student(std::string n, int a) : name(n), age(a) {}

  • 使用成员初始化列表(冒号后部分)比在函数体内赋值更高效,尤其对自定义类型
  • 如果没定义任何构造函数,编译器会提供默认构造函数;但一旦定义了,就不会再自动生成默认版本
  • 可以重载多个构造函数,只要参数列表不同

创建和使用对象

定义类之后,就可以用它创建对象,并调用成员函数:

int main() {
  Student s1;                         // 调用默认构造函数
  Student s2("Alice", 20);         // 调用带参构造函数
  s2.display();
  return 0;
}

  • 对象在栈上创建时,构造函数立即执行
  • 若通过 new 动态分配(如 Student* p = new Student("Bob", 22);),构造函数也在内存分配后立刻调用
  • 成员函数需声明为 const(如 display() const)才能被 const 对象调用

补充:默认参数与委托构造(C++11起)

可简化构造函数数量:

Student::Student(std::string n = "Unknown", int a = 0) : name(n), age(a) {}

或用委托构造避免重复代码:

Student::Student() : Student("Unknown", 0) {}
Student::Student(std::string n, int a) : name(n), age(a) {}

  • 委托构造中,冒号后只能调用本类的另一个构造函数,且不能同时使用成员初始化列表
  • 被委托的构造函数先执行,再继续当前构造函数的函数体(如果有)