首页 > 解决方案 > 从其自定义构造函数重新分配派生对象的正确方法是什么

问题描述

给出以下代码:

#include <iostream>

class A
{
public:
  int a;
  A() : a(0) {}
};

class B : public A
{
public:
  int b;
  B(int b) : b(b) {}
  B() {}
};

int main()
{
  B new_b;
  new_b.b = 5;
  new_b.a = 4;
  std::cout << new_b.a << std::endl;
  new_b = B(2); // at this point I want to keep new_b.a
  std::cout << new_b.a << std::endl;
}

实现这一目标的正确方法是什么?我知道我可以重载 B 的赋值运算符,只在这里接管 new_b.b,但这是保持 Ba 值的正确方法吗?

感谢您对此问题的任何帮助。

亲切的问候,史蒂夫

标签: c++oop

解决方案


#include <iostream>

class A
{
public:
    int a;
    A() : a(0) {}
};

class B : public A
{
public:
    int b;
    B(int b) : b(b) {}
    B() : b(0) {}
    B operator = (B ob) // using operator overloading, the = operator is overloaded
    {
        b = ob.b;
        return b;
    }
};

int main()
{
    B new_b;
    new_b.b = 5;
    new_b.a = 4;
    std::cout << new_b.a << std::endl;

    new_b = B(2); /* Previously a new object of class B with parameterized constructor was made and copied to new_b which created a new object of class A everytime.
                  Now as the = operator is overloaded, it just copies the value(2) into new_b without creating a new object of class B or A thus the original value of A::a is preserved*/

    std::cout << new_b.a << std::endl;
    std::cin.get();
}

嗨,这是我第一次发布答案,希望我足够清楚让您理解,如果您有问题,我很乐意再次提供帮助


推荐阅读