1.
static成员变量是在类加载的时候生成的
static成员函数既可以通过类名直接调用,也可以通过对象名进行调用
虚函数是C++中的,虚函数不可能是static的
static成员函数可以访问static成员变量
2.
enum中:首元素不赋值的话,默认为0;后一个元素不赋值的话比前一个元素大1
enum{a, b=5, c, d=4, e} k;
默认a=0,既然b=5,根据那么枚举类型的后一个元素在不赋值的情况下,比前一个元素大1,那么c默认为6,d= 4,e默认为5
3.
A选项 如果一个类中声明了纯虚函数,其派生类中没有对该函数定义,那该函数在派生类中仍为纯虚函数,凡是包含纯虚函 数的类都是抽象类。
B选项 通常重载函数调用的依据是函数名、参数类型、参数个数。.
C选项 静态数据成员是所有对象所共有的,所以C错
D选项 应该是编译时,而不是运行时。
4.
代码执行后,a和b的值分别为?
class Test{
public:
int a;
int b;
virtual void fun() {}
Test(int temp1 = 0, int temp2 = 0)
{
a=temp1 ;
b=temp2 ;
}
int getA()
{
return a;
}
int getB()
{
return b;
}
};
int main()
{
Test obj(5, 10);
// Changing a and b
int* pInt = (int*)&obj;
*(pInt+0) = 100;
*(pInt+1) = 200;
cout << "a = " << obj.getA() << endl;
cout << "b = " << obj.getB() << endl;
return 0;
}
答案:a=200 b=10;
解析:需要考虑虚函数表,指向虚函数表的指针在32位系统下占用4个字节,其地址分布在整个类成员变量的地址的首部,接下来就是变量a的地址、b的地址。当将test对象obj赋给指向整型的pInt后,指针pInt指向了地址的首部也就是虚函数表指针,所以*(pInt+0)=100改变的是虚函数表的值,接下来*(pInt+1)=200改变的是变量a的值,变量b没有变换。
5.
解析:构造函数可以重载,自然有含参构造函数。
构造函数和析构函数声明定义的时候,都是无类型的,不能添加 void.
析构函数的目的是释放对象自身内存,只能管理自己,不需要对外通信,自然不需要参数了。
6.STL中的unordered_map(哈希map)和priority_queue(优先级队列)使用的底层数据结构分别是:hashtable,heap(堆)。
7.
答案:124;
解析:1将二维数组赋给了指针,错误。
2将一维数组的指针赋值给一个指针,错误。(应改为p=*k)
4将二维数组赋值给指向一维数组的指针,错误