1
Look at this example

class base {
public:
    int m1;
    base() {
        m1 = 5;
    }
};

class der:  public base  {
public:
    int m1;
    der() {
        m1 = 6;
    }
};

int main() {
    der d;
    cout << d.m1;   
    return 0;
}

这里对象 d 的大小是8 byte,分配给2 m1(一个用于基类,另一个用于派生类)。解决机制是什么d.m1

4

2 回答 2

6

m1inder隐藏了base's的名称,因此通过对象进行的m1任何访问都会让您获得该实例的. 您可以像这样访问:m1derder::m1base::m1der

class der:  public base  {
public:
    int m1;
    der() {
        m1 = 6;
        base::m1=7; // access base object's m1 inside der
    }
};

您可以这样访问基础对象:

der d;
d.base; // base object
std::cout << d.base::m1 >> "\n"; // access base object's m1 outside of der (if allowed)
于 2012-05-01T11:36:33.387 回答
5

编译器m1根据d. 这意味着您将获得不同的结果

der d;
cout << d.m1;

der d;
base &b = d;
cout << b.m1;

这是因为在解析m1类型表达式时der,成员der::m1隐藏base::m1

于 2012-05-01T11:36:24.540 回答