题目摘录-编程语言(C++)(一)
题目:
以下代码:
class ClassA{
public:
virtual ~ClassA(){};
virtual void FunctionA(){};
};
class ClassB{
public:
virtual void FunctionB(){};
};
class ClassC:public ClassA, public ClassB{
public:
};
ClassC Object;
ClassA* pA = &Object;
ClassB* pB = &Object;
ClassC* pC = &Object;
关于pA,pB,pC的取值,下面的描述中正确的是:
答案:
pA和pB不相同
解答:
考察多继承且有虚函数情况下C++存储对象模型。
1. 多继承按继承顺序组织对象模型,有虚函数时低地址包含指向虚函数表的指针。
2. 对象Object的存储模型:类A虚函数表指针(ptrA) | 类A数据 | 类B虚函数表指针(ptrB) | 类B数据 | 类C数据。
3. 子类的虚函数被放到了第一个基类的虚函数表最后(ptrA指向的虚函数表结构:类A虚函数 | 类C虚函数)。
4. 有虚函数的继承,对象地址为指向虚函数表的指针的地址,即pC = &Object = &ptrA。
6. pC = pA = &ptrA = &Object,(pC = pA) < pB。
题目:
下列程序的输出结果:
#include <iostream>
using namespace std;
class A{
public:
void print(){
cout << "A:print()";
}
};
class B:private A{
public:
void print(){
cout << "B:print()";
}
};
class C:public B{
pu