我有一個巨大的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)'構造函數。 –