帮忙看一下这道C++的题,要是能详细解释,举一反三就更好 了
5.观察下面一段代码:classClassA{public:virtual~ClassA(){};virtualvoidFunctionA(){};};classClas...
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 展开
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 展开
3个回答
展开全部
楼上答的都不对
实际运行一下,选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;
存在隐式转换的,也就是说源代码等号右边虽然写法都一样,但编译器的解释是不一样的.
实际运行一下,选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;
存在隐式转换的,也就是说源代码等号右边虽然写法都一样,但编译器的解释是不一样的.
展开全部
A.pA,pB,pC的取值相同
aObject是一个客观存在的对象,该对象的首地址是唯一的,确定的。无论你把这个地址赋值给哪一个指针变量,地址就是地址,指向是一样的。多态只是发生在通过基类指针或引用调用虚函数的情况。
aObject是一个客观存在的对象,该对象的首地址是唯一的,确定的。无论你把这个地址赋值给哪一个指针变量,地址就是地址,指向是一样的。多态只是发生在通过基类指针或引用调用虚函数的情况。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
同上,
补充的是:
假如派生类class c中有定义跟基类a,b类同名的函数时,用指向派生类对象的基类指针去调用这些函数时,其中加了virtual的基类函数将被派生类的同名函数覆盖,其他的都是调用基类的方法。
补充的是:
假如派生类class c中有定义跟基类a,b类同名的函数时,用指向派生类对象的基类指针去调用这些函数时,其中加了virtual的基类函数将被派生类的同名函数覆盖,其他的都是调用基类的方法。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询