帮忙看一下这道C++的题,要是能详细解释,举一反三就更好 了

5.观察下面一段代码:

class ClassA

{

public:

virtual ~ ClassA(){};

virtual void FunctionA(){};

};

class ClassB

{

public:

virtual voidFunctionB(){};

};

class ClassC : public ClassA,public ClassB

{

public:

};

ClassC aObject;

ClassA* pA=&aObject;

ClassB* pB=&aObject;

ClassC* pC=&aObject;

关于pA,pB,pC的取值,下面的描述中正确的是:

A.pA,pB,pC的取值相同. B.pC=pA+pB

C.pA和pB不相同 D.pC不等于pA也不等于pB

楼上答的都不对
实际运行一下,选C,
因为
ClassA* pA=&aObject;
ClassB* pB=&aObject;
ClassC* pC=&aObject;
这三行代码实际等价于:
ClassA* pA=static_cast<ClassA*>(&aObject);
ClassB* pB=static_cast<ClassB*>(&aObject);
ClassC* pC=&aObject;
存在隐式转换的,也就是说源代码等号右边虽然写法都一样,但编译器的解释是不一样的.
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-03-21
A.pA,pB,pC的取值相同

aObject是一个客观存在的对象,该对象的首地址是唯一的,确定的。无论你把这个地址赋值给哪一个指针变量,地址就是地址,指向是一样的。多态只是发生在通过基类指针或引用调用虚函数的情况。本回答被提问者采纳
第2个回答  2012-03-21
同上,
补充的是:
假如派生类class c中有定义跟基类a,b类同名的函数时,用指向派生类对象的基类指针去调用这些函数时,其中加了virtual的基类函数将被派生类的同名函数覆盖,其他的都是调用基类的方法。
相似回答