我相信我正在考虑这种“严重”问题(非C ++'y)。这就是我想要做的
class AA {
public:
AA(const char* name, unsigned short number);
int Write(int x);
...
}
class BB: public AA {
public:
BB(const char* name, unsigned short number, const char* other);
BB(AA aaObj, const char* other);
int Write(double y, int x) {
/* do something */
AA::Write(x)
}
...
}
在第二个BB构造函数中,我想用aaObj替换BB的基础对象。我不想复制,我希望实际的基础对象是相同的(相同的引用)。
问题:
这两个类通常在内存布局上不匹配(例如,您可能在中有其他数据成员BB
)。此外,由于您在构造函数中,因此您已经在创建一个新对象。
BB
除非您确定AA
原来是的一个BB
类(或的子类BB
),否则您不能向下转换。例如:
BB b;
AA * a = dynamic_cast<AA *> (&b);
/* use initialization code for AA on a */
/* Now you could do (though this example becomes a bit weird): */
BB *bb = dynamic_cast<BB *> (a);
为什么要避免复印?您有大量的数据成员吗?在这种情况下,请考虑shared_ptr
在相关的类成员上使用a并实现一个赋值运算符。这样做:
AA a;
/* ... */
BB b;
b = a;
要么
BB b(a)
只是分配shared_ptr
s的问题,因此非常便宜。
简短回答您的问题:
不是当前形式,可能是向下浇铸。但这可能是一个错误的设计。
是。大概。
AA
,复制AA
到BB
(这可能不是很大的代价),进行重构,以便可以BB
直接实例化,而将向上转换发送AA
到初始化例程。为了提供更详细的建议,我们需要有关您要优化的特定问题的更多代码或信息。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句