代码:
class Base1
{
public:
int _b1;
};
class Base2
{
public:
int _b2;
};
class Derive :public Base1, public Base2
{
public:
int _d;
};
int main()
{
Derive d;
Base1* p1 = &d;
Base2* p2 = &d;
Derive* p3 = &d;
system("pause");
return 0;
}
题目:
A、p1==p2==p3
B、p1<p2<p3
C、p1==p3!=p2
D、p1!=p2!=p3
这道题的答案是C。这道题主要考察了继承的顺序问题,哪个类先继承哪个类就在最上面,下面用图来解释说明:
在内存中,Base1先被继承,存在于内存的最上方,所以p1指向Base1,Base2后被继承,所以p2指向Base2;而Derive继承了Base1和Base2,代表的是一个整体,所以指针p3指向内存的顶部,即p3指向的是Base1;
需要注意的是,若Base1和Base2的继承顺序反过来,则指针p1和p2所指向的位置也会相反。