📜  C++构造函数

📅  最后修改于: 2020-09-25 04:47:22             🧑  作者: Mango

在本教程中,我们将通过帮助示例来了解C++构造函数及其类型。

构造函数是成员 函数的一种特殊类型,在创建对象时会自动调用它。

在C++中,构造函数具有与类相同的名称,并且没有返回类型。例如,

class  Wall {
   public:

    // create a constructor
    Wall() {
        // code
    }
};

在这里, 函数 Wall()Wall类的构造函数。请注意,构造函数

C++默认构造函数

没有参数的构造函数称为默认构造函数 。在上面的示例中, Wall()是默认构造函数。

示例1:C++默认构造函数

// C++ program to demonstrate the use of default constructor

#include 
using namespace std;

// declare a class
class  Wall {

  private:
       double length;

   public:
    // create a constructor
    Wall() {

        // initialize private variables
        length = 5.5;

        cout << "Creating a wall." << endl;
        cout << "Length = " << length << endl;
    }
};

int main() {

    // create an object
    Wall wall1;

    return 0;
}

输出:

Creating a Wall
Length = 5.5

在这里,当创建wall1对象时,将wall1 Wall()构造函数。这会将对象的length变量设置为5.5

注意:如果我们尚未在类中定义构造函数,则C++编译器将自动创建一个空代码且无参数的默认构造函数。

C++参数化构造函数

在C++中,带有参数的构造函数称为参数化构造函数。这是初始化成员数据的首选方法。

示例2:C++参数化构造函数

// C++ program to calculate the area of a wall

#include 
using namespace std;

// declare a class
class Wall {
   private:
    double length;
    double height;

   public:
    // create parameterized constructor
    Wall(double len, double hgt) {
        // initialize private variables
        length = len;
        height = hgt;
    }

    double calculateArea() {
        return length * height;
    }
};

int main() {
    // create object and initialize data members
    Wall wall1(10.5, 8.6);
    Wall wall2(8.5, 6.3);

    cout << "Area of Wall 1: " << wall1.calculateArea() << endl;
    cout << "Area of Wall 2: " << wall2.calculateArea() << endl;

    return 0;
}

输出:

Area of Wall 1: 90.3
Area of Wall 2: 53.55

在这里,我们创建了一个参数化的构造函数Wall() ,它具有2个参数: double lendouble hgt 。这些参数中包含的值用于初始化成员变量lengthheight

当创建Room类的对象时,我们将成员变量的值作为参数传递。此代码是:

Wall wall1(10.5, 8.6);
Wall wall2(8.5, 6.3);

如此初始化了成员变量后,我们现在可以使用calculateArea() 函数calculateArea()墙的面积。

C++复制构造函数

C++中的复制构造函数用于将一个对象的数据复制到另一个对象。

示例3:C++复制构造函数

#include 
using namespace std;

// declare a class
class Wall {
   private:
    double length;
    double height;

   public:

    // parameterized constructor
    Wall(double len, double hgt) {
        // initialize private variables
        length = len;
        height = hgt;
    }

    // copy constructor with a Wall object as parameter
    Wall(Wall &obj) {
        // initialize private variables
        length = obj.length;
        height = obj.height;
    }
    double calculateArea() {
        return length * height;
    }
};

int main() {

    // create an object of Wall class
    Wall wall1(10.5, 8.6);

    // print area of wall1
    cout << "Area of Room 1: " << wall1.calculateArea() << endl;

    // copy contents of room1 to another object room2
    Wall wall2 = wall1;

    // print area of wall2
    cout << "Area of Room 2: " << wall2.calculateArea() << endl;

    return 0;
}

输出

Area of Room 1: 90.3
Area of Room 2: 90.3

在此程序中,我们使用了复制构造函数将Wall类的一个对象的内容复制到另一个对象。复制构造函数的代码为:

Room(Room &obj) {
    length = obj.length;
    height = obj.height;
}

请注意,此构造函数的参数具有Wall类的对象的地址。

然后,我们将第一个对象的变量值分配给第二个对象的相应变量。这就是复制对象内容的方式。

然后在main() ,创建两个对象wall1wall2 ,然后使用代码将第一个对象的内容复制到第二个对象

Wall wall2 = wall1;

注意 :构造函数主要用于初始化对象。创建对象时,它们还用于运行默认代码。