c++显式定义继承类的拷贝构造函数

在 C++ 中,拷贝构造函数用于创建一个对象的副本,其函数签名通常为 类名(const 类名&)。当一个对象被复制给另一个对象时,或者当对象作为函数参数传递给函数时,拷贝构造函数会被调用。

如果你不显式地定义一个拷贝构造函数,编译器会自动生成一个默认的拷贝构造函数。这个默认的拷贝构造函数执行的是浅拷贝,即简单地复制对象的每个成员的值。

如果类中包含指针成员,浅拷贝可能会导致问题,因为拷贝构造函数只是复制指针的值,而不是复制指针指向的内容,这可能导致多个对象共享同一块内存,造成潜在的内存管理问题。为了解决这个问题,需要实现自定义的拷贝构造函数来执行深拷贝,即复制指针所指向的内容。

继承类的拷贝构造函数的编写方式与普通类的拷贝构造函数类似。通常情况下,继承类的拷贝构造函数应该调用基类的拷贝构造函数来确保基类部分被正确地复制。

#include <iostream>
#include <cstring>

// 基类
class Base {
private:
    int* basePtr;

public:
    Base(int val) {
        basePtr = new int(val);
    }

    // 拷贝构造函数
    Base(const Base& other) {
        basePtr = new int(*other.basePtr);
    }

    // 析构函数
    ~Base() {
        delete basePtr;
    }

    void display() {
        std::cout << "Base value: " << *basePtr << std::endl;
    }
};

// 派生类
class Derived : public Base {
private:
    int* derivedPtr;

public:
    Derived(int baseVal, int derivedVal) : Base(baseVal) {
        derivedPtr = new int(derivedVal);
    }

    // 拷贝构造函数
    Derived(const Derived& other) : Base(other) {
        derivedPtr = new int(*other.derivedPtr);
    }

    ~Derived() {
        delete derivedPtr;
    }

    void display() {
        Base::display();
        std::cout << "Derived value: " << *derivedPtr << std::endl;
    }
};

int main() {
    Derived obj1(10, 20);
    Derived obj2 = obj1; // 调用拷贝构造函数创建 obj2 对象
    obj2.display();

    return 0;
}

相关推荐

  1. c++定义继承拷贝构造函数

    2024-04-12 22:20:04       31 阅读
  2. C++ 拷贝构造函数

    2024-04-12 22:20:04       56 阅读
  3. C++ 拷贝构造函数

    2024-04-12 22:20:04       54 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-12 22:20:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-12 22:20:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-12 22:20:04       82 阅读
  4. Python语言-面向对象

    2024-04-12 22:20:04       91 阅读

热门阅读

  1. MySQL基础练习题:习题12-15

    2024-04-12 22:20:04       39 阅读
  2. pe格式从入门到图形化显示(四)-节表

    2024-04-12 22:20:04       38 阅读
  3. C语言入门算法——拼数

    2024-04-12 22:20:04       37 阅读
  4. 代码随想录算法训练营day36

    2024-04-12 22:20:04       38 阅读
  5. 机器人的基本概念

    2024-04-12 22:20:04       44 阅读