默认构造函数
默认构造函数(Default Constructor):没有参数的构造函数,用于创建对象时不需要提供任何参数。如果没有显式定义,默认构造函数会被编译器自动生成。
class MyClass {
public:
MyClass() {
// 默认构造函数
}
};
MyClass obj; // 调用默认构造函数创建对象
拷贝构造函数
拷贝构造函数(Copy Constructor):接受一个同类型的对象作为参数,用于通过拷贝已有对象来创建新对象。它可以通过深拷贝或浅拷贝来复制对象的成员变量。
class MyClass {
public:
int value;
MyClass(const MyClass& other) {
value = other.value;
// 拷贝构造函数
}
};
MyClass obj1;
obj1.value = 5;
MyClass obj2(obj1); // 调用拷贝构造函数创建新对象obj2,并将obj1的值拷贝给obj2
移动构造函数
移动构造函数(Move Constructor):接受一个右值引用作为参数,用于将资源从一个对象转移到另一个对象,而不进行深拷贝。它通常用于实现移动语义,提高性能。
class MyClass {
public:
int* data;
MyClass(MyClass&& other) {
data = other.data;
other.data = nullptr;
// 移动构造函数
}
};
MyClass obj1;
obj1.data = new int[10];
MyClass obj2(std::move(obj1)); // 调用移动构造函数将obj1的资源移动给obj2,同时将obj1的data置为nullptr
带参构造函数
带参构造函数(Parameterized Constructor):接受一个或多个参数的构造函数,用于根据给定的参数创建对象。可以根据不同的参数组合,重载多个带参构造函数。
class MyClass {
public:
int value;
MyClass(int val) {
value = val;
// 带参构造函数
}
};
MyClass obj(10); // 调用带参构造函数创建对象,并将参数10传递给构造函数
转换构造函数
转换构造函数(Conversion Constructor):接受一个非本类类型的参数,用于将其他类型的对象转换为本类对象。它通常用于隐式类型转换。
class MyClass {
public:
int value;
MyClass(double val) {
value = static_cast<int>(val);
// 转换构造函数
}
};
MyClass obj = 3.14; // 调用转换构造函数将double类型的值转换为MyClass对象
委托构造函数
委托构造函数(Delegating Constructor):一个构造函数可以调用同类的其他构造函数来完成对象的初始化。这样可以避免代码重复,提高代码的可维护性。
class MyClass {
public:
int value;
MyClass() : MyClass(0) {
// 委托构造函数
}
MyClass(int val) {
value = val;
}
};
MyClass obj; // 调用委托构造函数,间接调用带参构造函数,并将参数0传递给带参构造函数