|
观察下面一段代码: 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+pB C.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; 存在隐式转换的,也就是说源代码等号右边虽然写法都一样,但编译器的解释是不一样的.
| |