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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
A: C11标准主要对以下方面进行了改进: 1. 原子操作:C11添加了一套原子操作API,用于在多线程应用程序中执行原子操作,防止竞争条件。 2. 多线程:C11定义了一组库函数,用于创建、共享和同步线程的操作。 3. 静态断言:静态断言是编译时断言,而不是运行时断言,它能够在编译时检查程序的有关属性是否符合预期。C11中添加了_Static_assert关键字,用于实现静态断言。 4. Unicode 字符串支持:C11提供了一组库函数,用于在处理Unicode字符串时使用的字符和字符串I / O。 5. 安全和boundaries:C11在库和语言层面上增强了安全性和下界检查,防止缓冲区溢出等常见错误。 6. Type Generics:C11对C语言添加了一些新的“泛型”特性,使得在编译时根据特定的类型来生成代码更加容易。 7. 对齐和 _Alignof:C11增加了一个包含 _Alignof 运算符, 该运算符返回请求的类型的自然对齐方式的大小 。这无疑帮助程序员更好的理解程序的性能问题。 8. remove 指针:C11提供了一个新的关键字 _Generic,它可以根据输入表达式的类型自动选择正确的代码块,从而方便地处理不同类型的指针。它还通过添加 remove关键字来解决泛型指针的一些问题,remove 关键字将指针的类型“去掉”,只保留其中的基本类型。 9. 原子类型支持:C11增加了对 _Atomic 的支持,允许应用程序对特定的变量或数据结构强制要求原子访问。 10. 无名联合体:C11允许在联合体中定义无名成员。这使得程序员可以创建大小和类型不可用的联合体,无需分配任何内存。 以上是C11的主要特性和改进,包括了原子操作、多线程、静态断言、Unicode支持、安全和边界、Type Generics、对齐和_Alignof、remove指针、原子类型支持、无名联合体等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值