C++面试题

来源:互联网 发布:数据库系统基础 答案 编辑:程序博客网 时间:2024/06/16 19:48
01 引用和指针的区别相同点:都是地址的概念;指针存储对象的地址,引用时内存块的别名。不同点:1)指针式实体,引用时别名。2)指针需要解引用(*),引用不需要解引用。2)指针初始化后,可以反复修改。引用只能初始化一次,不能修改。3)const可以修饰指针,表示常指针,即指针指向的对象地址不可以修改,但此对象的值可变。const不能修改引用。4)sizeof(指针)表示指针变量的大小。sizeof(引用)表示引用对象的大小
02 new/delete,malloc/free的区别相同点:用于内存管理。不同点:1) 函数和运算符的区别malloc/free是C语言函数,new/delete是C++运算符。因此编译器不能把对象的构造函数和析构函数调用强加于malloc/free函数。2)功能差异mallo分配指定大小的内存块,free释放指定大小的内存块。new/delete,可以管理自定义对象的内存分配。new对象时,先分配内存空间,紧接着调用构造函数delete对象时,先调用析构函数,然后释放内存空间。注:new/delete表示创建和删除单一对象;   new[]/delete[]表示创建和删除对象数组;
03 继承类的析构函数/构造函数的调用顺序场景1:创建继承类[基类构造函数]->[派生类构造函数]场景2:释放继承类[派生类析构函数]->[基类析构函数]
04 重写[覆盖] 和 重载的区别场景1:重写[覆盖] 子类重写父类的方法。需要满足以下特性1)重写函数的函数名,函数入参,返回值都必须和父类是一样的。2)访问权限必须大于父类场景2:重载函数名相同,而入参不同(可以是入参的数量,类型等不同)注:函数名一定是相同的。入参部分一定是有差异的,可能是参数个数不同,也可能是参数类型不同)类的多态:理解为父类的同一个接口,在子类中有不同的具体实现(或自身类有函数重载)
05 虚函数,纯虚函数,普通函数场景:类继承1)普通函数  父类的普通函数,理解为提供给子类的强制实现,可以被调用。2) 虚函数  父类实现的虚函数,提供给子类的默认接口实现。此时,子类可以重写(覆盖)此接口,实现接口自定义划3)纯虚函数  基类为纯虚类,不提供默认接口实现,理解为“接口继承”。子类可做接口自定义化实现。注:C++的虚函数提供"运行是多态"。基类虚函数,提供子类的默认接口实现。子类可以重写父类的接口,实现接口自定义实现。
06 结构体和联合体的区别相同点:多可以存储多种不同类型的变量不同点:联合体:多种不同类型的变量,共同占用一块内存。内存为最大的变量所占的长度。当对其操作时,会覆盖之前的内存块中写入的变量值。结构体:多种不同类型的数据集合。内存为变量的所占的内存总和。当对其操作具体变量时,只影响此变量所在的内存空间,不会影响其他的变量。
07 C++是不是类型安全的不是。两个不同类型的指针可以进行强制转换(reinterpret cast)。C#是类型安全的。
08 数组和指针的区别1)功能   数组存储多个同类型的对象。指针存储对象的地址2)内存分配   数组可以分配在堆上(全局数组对象),栈上(局部变量)   指针可以指向任何的内存地址。3sizeof(数组),得到数组的所占内存大小。   sizeof(指针),得到指针自身的所占内存大小。ex:char a[] = "12345";int  nSize = sizeof(a);  // nSize = 6;char *b  = a;nSize = sizeof(b);       // nSize = 4;int fun(char c[10]){   int nSize = sizeof(c);  // 注意:nSize = 4;}
0 0
原创粉丝点击