📜  C ++ |构造函数|问题12(1)

📅  最后修改于: 2023-12-03 15:29:42.445000             🧑  作者: Mango

C++ | 构造函数 | 问题12

在C++中,构造函数是一种特殊的函数,它被用来初始化对象的数据成员。在创建对象时,构造函数会自动调用,确保对象的数据成员得到正确的初始化。

问题12将介绍在C++中如何编写一个带有参数的构造函数来初始化对象的数据成员。

编写带参数的构造函数

为了编写一个构造函数,您需要在类声明中定义一个公共成员函数,函数名称必须与类名称相同。例如:

class MyClass {
  public:
    MyClass(); // 默认构造函数
    MyClass(int x); // 带参数的构造函数
};

在上面的例子中,我们定义了一个默认构造函数和一个带有int类型参数的构造函数。

接下来,我们需要在类定义中实现带有参数的构造函数。例如,如果我们的构造函数接受一个整数参数并将其存储在数据成员中,我们可以这样实现它:

MyClass::MyClass(int x) {
  myInt = x;
}

在上面的代码中,我们使用了成员初始化列表来将构造函数的参数x分配给myInt变量。成员初始化列表使用冒号来分隔,如下所示:

MyClass::MyClass(int x) : myInt(x) {
  // 构造函数体
}

在这个例子中,我们使用了相同的方法将参数x赋值给myInt变量。这种写法的优点是可以提高效率,因为成员初始化列表会对数据成员进行初始化,而不是先赋值再初始化。

示例
#include <iostream>
using namespace std;

class Circle {
  private:
    double radius;

  public:
    Circle(double r) {
      radius = r;
    }

    double getArea() {
      return (3.14 * radius * radius);
    }

    double getPerimeter() {
      return (2 * 3.14 * radius);
    }
};

int main() {
  Circle c1(5);
  Circle c2(7.5);

  cout << "Circle 1 area: " << c1.getArea() << endl;
  cout << "Circle 1 perimeter: " << c1.getPerimeter() << endl;
  cout << "Circle 2 area: " << c2.getArea() << endl;
  cout << "Circle 2 perimeter: " << c2.getPerimeter() << endl;

  return 0;
}

在上面的示例中,我们定义了一个Circle类,并使用构造函数来初始化圆的半径。然后我们定义了两个圆,并使用它们的方法来计算面积和周长。

结论

带有参数的构造函数是用来初始化对象数据成员的特殊函数。构造函数的名称必须与类名称相同,可以接受任意数量和类型的参数。成员初始化列表可以用来提高效率。