Запутался насчет точки члена класса в переполнении стека

Три класса, как показано ниже:

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 а также &Derive::var2, Почему они оба равны 0 скорее, чем 0 а также 4 соответственно?

Примечание: я проверяю это с gcc4.7.1 и vs2010. И результаты одинаковы.

-4

Решение

Как @HerbSutter ответил в Адрес указателя C ++ на член данных класса в Visual Studio,:

Тип &Derive::var1 является int Base::* вместо int Derive::*,

Тип &Derive::var2 является int Base2::* вместо int Derive::*,

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]