封装::语法::函数
1. 构造函数(Constructor)
- 概念:构造函数是一种特殊的成员函数,用于在创建对象时初始化对象的成员变量。它的名称与类名相同,且没有返回类型。
- 语法:
class ClassName { public: ClassName(parameter_list) { // 构造函数 // 初始化列表或赋值操作 } };
- 特点:构造函数可以有参数,也可以没有参数(默认构造函数)。它在对象创建时自动调用。
示例代码:
class Person {
public:
Person(string name, int age) : name(name), age(age) {} // 构造函数和初始化列表
private:
string name;
int age;
};
Person person1("Kimi", 30); // 使用构造函数创建对象
2. 拷贝构造(Copy Constructor)
-
概念:拷贝构造函数是一种特殊的构造函数,用于创建一个对象作为另一个对象的副本。
-
语法:
class ClassName { public: ClassName(const ClassName& other) { // 拷贝构造函数 // 复制操作 } };
-
使用场景:当函数参数传递对象、返回对象或对象作为另一个对象的成员时,拷贝构造函数会被调用。
-
深拷贝:深拷贝拷贝对象的所有成员,包括动态分配的内存。
-
浅拷贝:浅拷贝只拷贝对象的非动态分配成员,动态分配的内存只拷贝指针,不拷贝内容。
示例代码:
class Person {
public:
Person(const Person& other) { // 拷贝构造函数
name = other.name;
age = other.age;
if (other.dynamicData) {
dynamicData = new int(*other.dynamicData);
}
} // 深拷贝
private:
string name;
int age;
int* dynamicData;
};
Person person1("Kimi", 30);
Person person2 = person1; // 调用拷贝构造函数
3. 析构函数(Destructor)
- 概念:析构函数是一种特殊的成员函数,用于在对象生命周期结束时执行清理工作,如释放动态分配的内存。
- 语法:
class ClassName { public: ~ClassName() { // 析构函数 // 清理操作 } };
- 特点:析构函数在对象生命周期结束时自动调用,可以有虚析构函数以支持多态。
示例代码:
class Person {
public:
~Person() { // 析构函数
delete dynamicData;
std::cout << "Person destroyed" << std::endl;
}
private:
string name;
int age;
int* dynamicData = new int(25); // 动态分配内存
};
int main() {
Person* person = new Person();
delete person; // 调用析构函数
return 0;
}
构造函数、拷贝构造函数和析构函数是类中管理对象生命周期的关键组成部分。构造函数用于初始化,拷贝构造函数用于创建对象的副本,而析构函数用于清理。正确使用这些函数可以防止资源泄漏并确保对象的正确管理。
作者:
hwaityd
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。