我從基類到派生類型轉換時遇到了問題(因爲我確定該對象是確切類型)。 這裏是我的代碼(簡化):C++中的類型轉換問題
class MyCollection
{
public:
Element* Get(int i) {
return elements[i];
}
void Add(Element* element) {
//finding i
elements[i] = element;
}
private:
Element* elements[100];
}
class Element {
public:
int ID;
}
class SpecialElement : public Element
{
public:
SpecialElement(char* name) {
this-> Name = name;
}
char* GetName() { return Name; }
private:
char* Name;
}
現在,當我加入SpecialElement的MyCollection的對象,當我把斷點添加的時刻,投我的Add方法的參數在立即窗口和調用GetName方法是返回我物品的名稱,但是當我做這樣的事情時:
void main() {
MyCollection coll = new MyCollection();
coll.Add(new SpecialElement("MyName"));
SpecialElement* foundElement = (SpecialElement*)coll->Get(0);
foundElement->GetName(); //Error
}
我想知道爲什麼?不是創建SpecialElement類型的對象嗎?
請勿使用'void main()':http://www2.research.att.com/~bs/bs_faq2.html#void-main – chris
過度使用動態分配。不好的使用字符串。並濫用積分。 – Puppy
集合的味道像**切片**全... –