C++ 构造函数

构造函数

C++ 中的构造函数是一种 特殊方法,它在创建类的对象时自动调用。

要创建构造函数,请使用与类相同的名称,后跟括号():

实例
  1. #include <iostream>
  2. using namespace std;
  3. class MyClass { // The class
  4. public: // Access specifier
  5. MyClass() { // Constructor
  6. cout << "Hello World!";
  7. }
  8. };
  9. int main() {
  10. MyClass myObj; // Create an object of MyClass (this will call the constructor)
  11. return 0;
  12. }

注意:构造函

数与类具有相同的名称,它始终是 public 公共的,并且没有任何返回值。


构造函数参数

构造函数还可以获取参数(就像常规函数一样),这对于设置属性的初始值非常有用。

下面的类具有 brand 品牌、model 型号和 year 年份属性,以及具有不同参数的构造函数。在构造函数中,我们将属性设置为构造函数参数(brand=x等)。当我们调用构造函数(通过创建类的对象)时,我们将参数传递给构造函数,构造函数将相应属性的值设置为相同的值:

实例
  1. #include <iostream>
  2. using namespace std;
  3. class Car { // The class
  4. public: // Access specifier
  5. string brand; // Attribute
  6. string model; // Attribute
  7. int year; // Attribute
  8. Car(string x, string y, int z) { // Constructor with parameters
  9. brand = x;
  10. model = y;
  11. year = z;
  12. }
  13. };
  14. int main() {
  15. // Create Car objects and call the constructor with different values
  16. Car carObj1("BMW", "X5", 1999);
  17. Car carObj2("Ford", "Mustang", 1969);
  18. // Print values
  19. cout << carObj1.brand << " " << carObj1.model << " " << carObj1.year << "\n";
  20. cout << carObj2.brand << " " << carObj2.model << " " << carObj2.year << "\n";
  21. return 0;
  22. }

与函数一样,构造函数也可以在类之外定义。首先,在类内声明构造函数,然后在类外定义它,方法是指定类的名称,后跟作用域运算符 ::,后跟构造函数的名称(与类相同):

实例
  1. #include <iostream>
  2. using namespace std;
  3. class Car { // The class
  4. public: // Access specifier
  5. string brand; // Attribute
  6. string model; // Attribute
  7. int year; // Attribute
  8. Car(string x, string y, int z); // Constructor declaration
  9. };
  10. // Constructor definition outside the class
  11. Car::Car(string x, string y, int z) {
  12. brand = x;
  13. model = y;
  14. year = z;
  15. }
  16. int main() {
  17. // Create Car objects and call the constructor with different values
  18. Car carObj1("BMW", "X5", 1999);
  19. Car carObj2("Ford", "Mustang", 1969);
  20. // Print values
  21. cout << carObj1.brand << " " << carObj1.model << " " << carObj1.year << "\n";
  22. cout << carObj2.brand << " " << carObj2.model << " " << carObj2.year << "\n";
  23. return 0;
  24. }