我有一个巨大的C++代码库我正在使用。如何在C++中实例化一个成员变量中的子类实例?
我想介绍一个新的子类,并将其用于各种不同的上下文中,但是我的Java训练思想在C++中遇到了问题。
我希望尽量减少代码更改。所以,我感兴趣的主要类(下面的BAR
)具有类FOO
的成员变量。我想制作FOO
的子类别FOOSUBCLASS
。在java中这是微不足道的。对象默认通过引用存储。这段代码没有这样做(如下所示),我可以在不改变接口的情况下按摩这些代码(并且不需要引入引用)并且仍然可以让我的应用程序工作?
class FOO {
};
class FOOSUBCLASS : FOO {
public:
FOOSUBCLASS(const int id) {_id = id;}
private:
int _id;
};
class BAR {
public:
BAR(const FOO foo) { _foo = foo;}
private:
FOO _foo;
};
下面,是我的主:
FOOSUBCLASS fsc(1);
BAR b(fsc);
但是,这并不在VS2005编译。它说:
“类型转换”:从“FOOSUBCLASS *”到“常量FOO &”存在转换,但不能访问
获取相同的编译错误,如果我明显的其它构造函数添加到BAR
BAR(const FOOSUBCLASS foo) { _foo = foo;}
我对C++的理解是,它会将FOOSUBCLASS
中的数据复制到类FOO
的对象中。 (使用赋值运算符或类的重写版本)但在我的情况下,我在FOOSUBCLASS
(和一些重写的成员函数)中有额外的成员变量,所以我只是不希望它做到这一点。我希望我的成员变量_foo
在某些情况下属于FOOSUBCLASS
类型,在其他情况下为FOO
。这甚至有可能吗?
感谢您的想法。
'并且没有介绍参考文献'为什么? –
@JesseGood,因为我想避免在代码库中做出巨大的改变。这是一百万行代码库,引入引用将改变应用程序的生命周期管理。但是,根据下面的答案,它看起来像我完全坚持必须这样做...... – John
唯一的另一种选择是添加另一个成员'FOOSUBCLASS myfoosub;'和'BAR(const FOOSUBCLASS)'构造函数。 –