在 C++ 中,构造函数是用于初始化对象的特殊成员函数,它们在对象创建时自动调用。构造函数可以分为默认构造函数、带参数构造函数、拷贝构造函数和移动构造函数。下面让我们逐个进行实战指南。
默认构造函数没有参数,用于创建对象时执行必要的初始化操作。
#include <iostream> class MyClass { public: MyClass() { std::cout << "Default Constructor called" << std::endl; } }; int main() { MyClass obj; // 调用默认构造函数 return 0; }
带参数构造函数接受参数,并用参数初始化对象的成员变量。
#include <iostream> class MyClass { public: int value; MyClass(int val) : value(val) { std::cout << "Parameterized Constructor called with value: " << val << std::endl; } }; int main() { MyClass obj(10); // 调用带参数构造函数 std::cout << "Value: " << obj.value << std::endl; return 0; }
拷贝构造函数用于从一个已有对象创建一个新对象,它将一个对象的数据成员值复制到另一个对象中。
#include <iostream> class MyClass { public: int value; MyClass(int val) : value(val) {} // 拷贝构造函数 MyClass(const MyClass &obj) { std::cout << "Copy Constructor called" << std::endl; value = obj.value; // 复制对象的数据成员值 } }; int main() { MyClass obj1(10); // 创建对象1 MyClass obj2 = obj1; // 使用拷贝构造函数创建对象2 std::cout << "Value of obj2: " << obj2.value << std::endl; return 0; }
移动构造函数用于将临时对象(右值引用)的资源(如指针)转移给新对象,而不是拷贝。
#include <iostream> class MyString { public: char *str; MyString(char *s) : str(s) {} // 移动构造函数 MyString(MyString &&obj) noexcept : str(obj.str) { std::cout << "Move Constructor called" << std::endl; obj.str = nullptr; // 将临时对象的资源转移给新对象 } }; int main() { char text[] = "Hello"; MyString obj1(text); // 创建对象1 MyString obj2 = std::move(obj1); // 使用移动构造函数创建对象2 std::cout << "Value of obj2: " << obj2.str << std::endl; std::cout << "Value of obj1: " << (obj1.str ? obj1.str : "nullptr") << std::endl; return 0; }
合理使用构造函数能够确保对象的正确初始化和资源管理,从而提高程序的健壮性和性能。
原文链接:codingdict.net