hwaityd的小窝

Loading...

封装::语法::函数

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;
}

构造函数、拷贝构造函数和析构函数是类中管理对象生命周期的关键组成部分。构造函数用于初始化,拷贝构造函数用于创建对象的副本,而析构函数用于清理。正确使用这些函数可以防止资源泄漏并确保对象的正确管理。

posted on 2024-10-20 00:29  hwaityd  阅读(3)  评论(0编辑  收藏  举报