我正在使用一个庞大的 C++ 代码库。
我想引入一个新的子类,并在各种不同的上下文中使用它,但是我受过 Java 训练的头脑在 C++ 中遇到了麻烦。
我希望尽量减少代码更改。所以,我感兴趣的主要类(BAR
下面)有一个成员变量 class 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 中编译。它说:
'type cast' : 从 'FOOSUBCLASS *' 到 'const FOO &' 的转换存在,但无法访问
如果我将明显的其他构造函数添加到BAR
BAR(const FOOSUBCLASS foo) { _foo = foo;}
我对 C++ 的理解是,它将数据复制FOOSUBCLASS
到 class 的对象中FOO
。(使用赋值运算符,或它的类覆盖版本)但在我的情况下,我有额外的成员变量FOOSUBCLASS
(和一些被覆盖的成员函数)所以我只是不希望它这样做。我希望我的成员变量在某些情况下和其他情况下_foo
真正具有类型。这甚至可能吗?FOOSUBCLASS
FOO
谢谢你的想法。