c++ - 从其自定义构造函数重新分配派生对象的正确方法是什么
问题描述
给出以下代码:
#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 值的正确方法吗?
感谢您对此问题的任何帮助。
亲切的问候,史蒂夫
解决方案
#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();
}
嗨,这是我第一次发布答案,希望我足够清楚让您理解,如果您有问题,我很乐意再次提供帮助
推荐阅读
- haskell - 如何让这个函数懒惰地消耗它的输入比特流?
- c# - 自定义 AssemblyLoadContext 无法加载 Microsoft.AspNetCore.Components
- sql - 有什么方法可以从sql中获取句号
- flutter - How would I fix "RangeError (index): Invalid value: Not in range 0..13, inclusive: 14"
- hibernate - Spring JPA Criteria Query group by with to_char 函数
- mysql - 我怎样才能加入这两个表
- sql - 在 SQL Server 中,如何防止多线程应用程序读取同一行两次?
- javascript - 可以将事件侦听器重新添加到数据表吗?
- regex - 正则表达式命名捕获组
- typescript - 如何检查类型是否相同?