📅  最后修改于: 2020-09-25 04:47:22             🧑  作者: Mango
构造函数是成员 函数的一种特殊类型,在创建对象时会自动调用它。
在C++中,构造函数具有与类相同的名称,并且没有返回类型。例如,
class Wall {
public:
// create a constructor
Wall() {
// code
}
};
在这里, 函数 Wall()
是Wall
类的构造函数。请注意,构造函数
没有参数的构造函数称为默认构造函数 。在上面的示例中, Wall()
是默认构造函数。
// 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++ 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 len
和double hgt
。这些参数中包含的值用于初始化成员变量length
和height
。
当创建Room
类的对象时,我们将成员变量的值作为参数传递。此代码是:
Wall wall1(10.5, 8.6);
Wall wall2(8.5, 6.3);
如此初始化了成员变量后,我们现在可以使用calculateArea()
函数calculateArea()
墙的面积。
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()
,创建两个对象wall1
和wall2
,然后使用代码将第一个对象的内容复制到第二个对象
Wall wall2 = wall1;
注意 :构造函数主要用于初始化对象。创建对象时,它们还用于运行默认代码。