观察下面一段代码:class ClassA{public:virtual ~ ClassA(){};virtual void FunctionA(){};};class ClassB{public:virtual void FunctionB(){};};class ClassC : public ClassA,public ClassB{public:};
ClassCaObject;ClassA* pA=&aObject;ClassB* pB=&aObject;ClassC* pC=&aObject;关于pA,pB,pC的取值,下面的描述中正确的是:A.pA,pB,pC的取值相同. B.pC=pA+pBC.pA和pB不相同 D.pC不等于pA也不等于pB
解答:PA=PC 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;存在隐式转换的,也就是说源代码等号右边虽然写法都一样,但编译器的解释是不一样的.
转载于:https://www.cnblogs.com/iamdanger/p/3625712.html