【发布时间】:2015-04-26 17:47:04
【问题描述】:
假设我有以下内容:
class A {
private:
int a;
virtual int f() {return a;}
public:
A(int t) {a = t;}
};
现在,如果我获得了指向 A 对象的指针,我该如何访问 int A::f()?我知道怎么弄!
void main () {
A* x = new A(5);
cout << ((int*)x)[2]; // returns 5;
}
但现在确定如何运行 A::f()。
更新:我知道这不是一个好的设计,并且应该隐藏私人。问题只是要知道类在编译器中是如何放入内存中的。
【问题讨论】:
-
您要解决什么问题? hacky 解决方案将由实现定义 - 找到 vtable 指针,然后找到正确的表条目。