我在从基类到派生的类型转换方面遇到问题(我正在转换,因为我确定该对象是那个确切的类型)。这是我的代码(简化):
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 类型的已创建对象吗?