-5

三类如下:

class Base
{
public:
    int var1;
};
class Base2
{
public:
    int var2;
};
class Derive:public Base,public Base2
{
public:
    int var3;
};
int main()
{

    printf("%d %d %d %d %d", &Base::var1, &Base2::var2, &Derive::var1, &Derive::var2, &Derive::var3);
    int Derive::* p = &Derive::var1;
    Derive d;
    d.var1 = 2;
    printf("%d", d.*p);
}

输出结果为0 0 0 0 8 2&Derive::var1我对and的结果感到困惑&Derive::var2。为什么它们都相等0而不是04分别?

注意:我用gcc4.7.1和vs2010测试过。结果是一样的。

4

1 回答 1

0

正如@HerbSutter 在 指向 Visual Studio 中类数据成员的 C++ 指针地址中回答的那样:

的类型&Derive::var1int Base::*而不是int Derive::*

的类型&Derive::var2int Base2::*而不是int Derive::*

于 2014-03-10T10:33:57.370 回答