【发布时间】:2014-04-06 02:59:32
【问题描述】:
假设我有 A 类,它有一个子类 B。
class A
{
public:
A(){};
}
class B : public A
{
public:
B(int value){ foo = value };
int foo;
}
B 是具有 int foo 的 A 的子类。
好的,现在假设我执行以下操作:
std::vector<A> mylist;
B myB(5); //Create a new instance of class B
mylist.push_back(myB); //Add b to my vector of A.
现在我想访问 mylist 的一个元素并将其类型转换为类型 B 并检索“foo”。以下是否合法?
B *instance = (B *)&mylist[0];
我已经在我的项目中尝试过这样做,但是如果我要打印出 foo 的值,那将是不正确的:
std::cout<<instance->foo<<std::endl; // This does not give me 5. It gives me a garbage number.
问题源于我不知道在 C++ 中转换非指针的正确方法。
【问题讨论】:
-
Okay now lets say I do the following:不要。既然你不应该这样做,那么你剩下的问题就变成了一个有争议的问题。 -
^那么我正在尝试找出正确的方法来投射非指针......
-
如果你的向量包含 A 对象,那么它应该只知道 A 对象。假设您现在更改向量以保存指向 A 对象的指针。尽管如此,向量应该只知道 A 指针,并且您应该只使用 A 接口。所以我要说的是你应该重新考虑你的设计。也许引入虚函数。
-
没有正确的方法。
标签: c++ pointers casting polymorphism subclass