关于C++/C的一些知识点整理 (2)

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将二维数组赋值给指向一维数组的指针,错误

猜你喜欢

转载自blog.csdn.net/mmmmmmyy/article/details/81130997