摘要:
# 53.delete p、delete [] p、allocator都有什么作用? 1、 动态数组管理new一个数组时,[]中必须是一个整数,但是不一定是常量整数,普通数组必须是一个常量整数; `delete p`是用于释放由`new`运算符分配的单个对象的内存。如果使用`new[]`运算符创建了 阅读全文
摘要:
# 51.深拷贝与浅拷可以描述一下吗? ## 1.浅拷贝 同一类型的对象之间可以赋值,使得两个对象的成员变量的值相同,两个对象仍然是独立的两个对象,这种情况被称为**浅拷贝。** 浅拷贝和深拷贝之间的区别:浅拷贝是指将对象中的数值类型的字段拷贝到新的对象中,而对象中的引用型字段则指复制它的一个引用到 阅读全文
摘要:
# 52.new和malloc的区别 **相同点** ●都可用于内存的动态申请和释放 ●new和malloc都可以分配指定大小的内存块,并且分配的内存都在堆上。 ●new和malloc的结果都返回一个指向已分配内存的指针。 ●都允许使用字面量作为参数来分配内存。 **不同点** ●前者是C++运算符 阅读全文
摘要:
# 50.从汇编层去解释一下引用 ``` 9: int x = 1; 00401048 mov dword ptr [ebp-4],1 10: int &b = x; 0040104F lea eax,[ebp-4] 00401052 mov dword ptr [ebp-8],eax ``` x的 阅读全文
摘要:
# 47.静态变量什么时候初始化? 1.初始化只有一次,但是可以多次赋值,在主程序之前,编译器已经为其分配好了内存。 2.静态局部变量和全局变量一样,数据都存放在全局区域,所以在主程序之前,编译器已经为其分配好了内存,但在C和C++中静态局部变量的初始化节点又有点不太一样。在C中,初始化发生在代码执 阅读全文
摘要:
# 48.const关键字的作用有哪些? 编写程序过程中,我们有时不希望改变某个变量的值。此时就可以使用关键字 **const** 对变量的类型加以限定。 ***初始化和const*** 因为const对象一旦创建后其值就不能再改变,所以const对象必须初始化。一如既往,初始值可以是任意复杂的表达 阅读全文
摘要:
# 49.什么是类的继承? ## 1.类与类之间的关系 has-A包含关系,用以描述一个类由多个部件类构成,实现has-A关系用类的成员属性表示,即一个类的成员属性是另一个已经定义好的类; use-A,一个类使用另一个类,通过类之间的成员函数相互联系,定义友元或者通过传递参数的方式来实现; is-A 阅读全文
摘要:
# 45.形参与实参的区别? 1.形参变量只有在被调用时才分配内存单元,在调用结束时, 即刻释放所分配的内存单元。因此,形参只有在函数内部有效。 函数调用结束返回主调函数后则不能再使用该形参变量。 2.实参可以是常量、变量、表达式、函数等, 无论实参是何种类型的量,在进行函数调用时,它们都必须具有确 阅读全文
摘要:
# 46.值传递、指针传递、引用传递的区别和效率 1.值传递:有一个实参向函数所属的栈拷贝数据的过程,如果值传递的对象是类对象或是大的结构体对象,将耗费一定的时间和空间。(传值) 2.指针传递:同样有一个实参向函数所属的栈拷贝数据的过程,但拷贝的数据是一个固定为4字节(32位操作系统)的地址。(传值 阅读全文
摘要:
# 43.static的用法和作用? 在C++中,`static`关键字有多种用法,可以用于声明静态成员变量、静态成员函数、静态局部变量和静态全局变量。下面是它们的作用和特点: ## 1.静态成员变量 ●在类内声明,类外进行定义和初始化(const修饰的静态成员变量最好在类内初始化) ```C++ 阅读全文
摘要:
# 44.C++中的const 编写程序过程中,我们有时不希望改变某个变量的值。此时就可以使用关键字 **const** 对变量的类型加以限定。 ***初始化和const*** 因为const对象一旦创建后其值就不能再改变,所以const对象必须初始化。一如既往,初始值可以是任意复杂的表达式: `` 阅读全文
摘要:
# 42.C++的异常处理的方法 在程序执行过程中,由于程序员的疏忽或是系统资源紧张等因素都有可能导致异常,任何程序都无法保证绝对的稳定,常见的异常有: - 数组下标越界 - 除法计算时除数为0 - 动态分配空间时空间不足 - ... 如果不及时对这些异常进行处理,程序多数情况下都会崩溃。 ## 1 阅读全文
摘要:
# 41.C++中有几种类型的new 在C++中,new有三种典型的使用方法:plain new,nothrow new和placement new (1)**plain new** 言下之意就是普通的new,就是我们常用的new,在C++中定义如下: ```C++ void* operator n 阅读全文
摘要:
# 39.volatile、mutable和explicit关键字的用法 ## 1.**volatile** ==☀警告== ``` volatile的确切含义与机器有关,只能通过阅读编译器文档来理解。要想让使用了volatile的程序在移植到新机器或新编译器后仍然有效,通常需要对该程序进行某些改变 阅读全文
摘要:
# 40.什么情况下会调用拷贝构造函数 - 用类的一个实例化对象去初始化另一个对象的时候 - 函数的参数是类的对象时(非引用传递) - 函数的返回值是函数体内局部对象的类的对象时 ,此时虽然发生(Named return Value优化)NRV优化,但是由于返回方式是值传递,所以会在返回值的地方调用 阅读全文
摘要:
# 38.如何用代码判断大小端存储? 大端存储:字数据的高字节存储在低地址中 小端存储:字数据的低字节存储在低地址中 例如:32bit的数字0x12345678 **所以在Socket编程中,往往需要将操作系统所用的小端存储的IP地址转换为大端存储,这样才能进行网络传输** 小端模式中的存储方式为: 阅读全文
摘要:
# 37.public,protected和private访问和继承权限的区别? - public的变量和函数在类的内部外部都可以访问。 - protected的变量和函数只能在类的内部和其派生类中访问。 - private修饰的元素只能在类内访问 派生类可以继承基类中除了构造/析构、赋值运算符重载 阅读全文
摘要:
# 36.内联函数和宏定义的区别 ■在使用时,宏只做简单字符串替换(编译前)。内联函数在编译时直接将函数代码嵌入到目标代码中,可以进行参数类型检查(编译时),语法判断等功能,且具有返回值,可以实现重载。 ■宏看起来像一个函数调用,但是会有隐藏一些难以发现的错误,宏定义时要注意书写(参数要括起来)否则 阅读全文
摘要:
# 33.C++中的重载、重写(覆盖)和隐藏的区别 (1)重载(overload) 重载是指在同一范围定义中的同名成员函数才存在重载关系。主要特点是函数名相同,参数类型和数目有所不同,不能出现参数个数和类型均相同,仅仅依靠返回值不同来区分的函数。重载和函数成员是否是虚函数无关。举个例子: ```C+ 阅读全文
摘要:
# 34.C++有哪几种的构造函数 C++中的构造函数可以分为4类: - 默认构造函数:在没有显式定义构造函数时,C++会自动生成一个默认构造函数,该函数没有参数,不执行任何操作。 - 初始化构造函数(有参数) - 拷贝构造函数:当使用现有对象初始化新对象时,拷贝构造函数被调用。它的语法是在函数声明 阅读全文