如何使用另一个类的对象编写Class的复制构造函数

妖怪

我在编写这个相当简单的程序时遇到了麻烦。我有两个类A和B。B有一个对象A。我需要编写B的Copy构造函数,以便B的两个实例将具有A的不同实例。是否有任何巧妙的方法来做到这一点?要做的一件事是获取parm的所有成员变量,创建一个新的A对象并分配这些成员变量。但是,如果类具有更多的成员变量,那就是一个问题。如何用一种简单的方式写这个?

class A
{   
public:
    int data;
    A()
    {

    }
    A(int parm) : data(parm)
    {

    }

    A(const A&parm)
    {
        this->data = parm.data;
    }
    A& operator = (const A& parm)
    {
        if (this != &parm)
        {
            this->data = parm.data;
        }
        return *this;
    }
    ~A()
    {
        cout << "A is destroyed";
    }

};
class B
{
public:

    A *a;
    B() 
    {
        a = new A(10);
    }

    B(const B&parm)
    {
        // How to copy the value of parm so this and parm have different A object
        // this.a = parm.a --> both this and parm points to same A object
    }

    B& operator = (const B&parm)
    {
        if (this != &parm)
        {
            this->a = parm.a;
        }
        return *this;
    }

    ~B()
    {
        // Null check 
        delete a;
    }
};
雷米·勒博

B的副本构造函数需要分配一个新A对象,data对象将从源parm.a成员中复制,您可以使用A的副本构造函数来做到这一点

B(const B &parm) {
    a = new A(*(parm.a));
}

另外,在B的赋值运算符中,两个A对象均已分配,因此只需调用A的赋值运算符:

B& operator=(const B &parm) {
    if (this != &parm) {
        *a = *(parm.a);
    }
    return *this;
}

话虽如此,如果您摆脱了指针,让编译器为您处理内存分配和复制,则可以大大简化代码:

class A {
public:
    int data;
    A(int parm = 0) : data(parm) { }
    ~A() { cout << "A is destroyed"; }
};

class B {
public:
    A a;
    B() : a(10) { }
};

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将编写的对象传递给另一个类的构造函数?

如何使用一个类的构造函数作为Java中另一个类的对象的参数?

如何为包含另一个类的类编写构造函数?

如何使用来自另一个类(构造函数)(java)的构造函数打印对象

使用来自另一个类的参数复制构造函数

使用类和构造函数将JavaScript对象基于另一个对象

类构造函数,它引用另一个对象,但我不想复制该对象

java:使用另一个类的构造函数

C ++-如何在另一个类中使用私有构造函数实例化对象

不确定如何使用另一个类的对象创建带有参数的构造函数

如何在 C++ 中使用具有另一个类对象的构造函数?

如何复制另一个类的对象?

ByteBuddy 如何使用构造函数调用类中的另一个构造函数来创建类?

如何在另一个类构造函数中使用一个类的成员

在另一个类的构造函数中使用一个类作为参数

使用构造函数将一个类传递给另一个类

如何使用作为另一个类的函数的参数访问的对象的函数?

我如何在一个类中声明一个对象,该对象在其构造函数中需要另一个?

将模板类的对象传递给另一个类的构造函数

C ++:将一个对象复制到构造函数中的另一个对象

在另一个类的构造函数中创建n个对象的最佳方法?

C ++-从另一个类构造函数调用一个类构造函数

如何将对象的动态数组传递给另一个类的参数化构造函数?

如何在另一个 Python 类构造函数中使用 __enter__ 方法实例化 Python 类

复制构造函数不能调用另一个复制构造函数吗?

通过引用另一个类的构造函数传递对象时出错

用参数初始化另一个类构造函数中的对象

构造函数交叉指向另一个类的对象

具有构造函数的另一个类中的对象数组