C++ 在C+;中,快速将基础对象的所有成员指定给派生对象+;
假设我们有一个基类和一个派生类:C++ 在C+;中,快速将基础对象的所有成员指定给派生对象+;,c++,inheritance,assignment-operator,C++,Inheritance,Assignment Operator,假设我们有一个基类和一个派生类: class Base { string s1; string s2; ... string s100; // Hundreds of members }; class Derived : public Base{ string s101; }; 我想将基础对象Base分配给派生对象Derived。我知道我们不能只使用运算符“=”将基础对象分配给其派生对象。 我的问题是:我们是否要把所有成员逐一复印?比如: derived.s1 = bas
class Base {
string s1;
string s2;
...
string s100; // Hundreds of members
};
class Derived : public Base{
string s101;
};
我想将基础对象Base
分配给派生对象Derived
。我知道我们不能只使用运算符“=”将基础对象分配给其派生对象。
我的问题是:我们是否要把所有成员逐一复印?比如:
derived.s1 = base.s1;
derived.s2 = base.s2;
...
derived.s100 = base.s100;
有没有更快或更简洁的方法?重载运算符=使用
返回的基本对象
我知道我们不能只使用操作符“=”将基础对象分配给它的
派生对象
当然你可以(在这个问题的背景下):
static_cast(派生)=base;
股票示例:
class Base {};
class Derived : public Base {};
void foo()
{
Derived d;
Base b;
static_cast<Base &>(d)=b;
}
类基{};
派生类:公共基{};
void foo()
{
导出d;
碱基b;
静态_cast(d)=b;
}
我知道我们不能只使用运算符“=”将基础对象分配给其派生对象
那不是真的
我们必须把所有成员一份一份地复印吗?比如:
base.s1=派生的base.s1;
base.s2=派生的base.s2;
...
base.s100=派生的0.s100
不是真的。正如Danh在第一条评论中提到的
base = derived
这就足够了,因为它执行隐式动态向上转换(即从指针转换为派生到指针转换为基)。看
我要将基础对象基础指定给派生对象
为其提供重载运算符=
:
class Derived : public Base {
Derived& operator=(const Base& b) {
Base::operator=(b); // call operator= of Base
s101 = something; // set sth to s101 if necessary
return *this;
}
};
那你可以
Base b;
// ...
Derived d;
// ...
d = b;
base=derived?派生对象不在那里,我当时只有一个base对象作为数据源。我想创建一个新的派生对象,分配其成员并将其放入一个容器中,比如一个映射。那么为什么要编写'base.s1=derived.s1'呢?假设
base
支持分配给base
),并且没有接受派生的运算符=()
,然后base=derived
将起作用。请澄清您是否询问base=derived代码>,或派生=基础代码>谢谢,我会试试这个静态演员。然而,即使在这种情况下,这也是一种良好的做法吗?@M.M-不符合gcc 6.1.1:“t.C:12:4:错误:不匹配‘运算符=’(操作数类型为‘派生’和‘基’)”@SamVarshavchik足够公平
Base b;
// ...
Derived d;
// ...
d = b;