C++面试打卡第一天

1.malloc free和new delete的区别?

①malloc free是c中的标准函数,new delete是c++中的运算符

②new一个对象时会调用该对象的构造函数,delete时会调用该对象的析构函数,而malloc free不会

③malloc开辟一块空间是默认返回void*类型指针,而new开辟一块空间会自动返回对应类型的指针

④malloc开辟一块空间需要程序员手动的计算分配内存大小(sizeof),new开辟一块空间会根据对应类型智能的计算。

⑤malloc内存分配失败会返回NULL,new内存分配失败时会抛出异常。

2.如何理解float型和double型?

符号位指数位尾数位
float1bit8bit23bit
double1bit11bit52bit

①内存空间:float时单精度浮点数,占4个字节32位;double时双精度浮点数,占8个字节64位

②取值范围:float的取值范围为-2^128~2^128,double的取值范围为-2^1024~2^1024

③有效位数:float提供7位有效数字,double提供16位有效数字。

3.指针和引用的区别?

指针是一个变量,指向一块地址。引用时给一个变量取别名。

指针指向的内存空间可以改变,但引用不能。

指针可以指向NULL,但引用不能,引用必须初始化。

指针可以多级,引用不能。(int **p合法,int&&a非法)。

sizeof指针是该指针的大小,sizeof引用是指向变量的大小。

当以指针作为参数传入时,形参会拷贝一份实参,两者指向的内存一样,但不是同一个变量,所以在函数中改变这个变量的指向不影响实参,而引用可以。

4.说明一下C++拷贝构造函数参数要用const&

引用:如果没有引用符号,就是值传递,在调用拷贝构造时,会在次调用拷贝构造创建一个临时的对象,然后这个临时的对象还会再次调用拷贝构造,就会陷入无穷无尽的循环,所以要加上引用符号。

const:const加上时为了防止对引用类型参数数值的意外修改。

5.重载,重定义,重写的区别

重载:重载是静态多态的体现,在编译时体现,是函数的名称相同,函数的返回类型,函数的参数类型,个数,顺序不同,当只有函数的返回类型相同时,不能构成重载,作用范围是在同一个作用域中。

重定义:重定义是子类重新定义父类中相同函数名的非虚函数,函数的参数可以不同,实现了子类对父类方法的隐藏。

重写:重写是动态多态的体现,在运行中体现,重写是在继承关系中,子类重新定义父类中的虚函数,函数的返回类型、参数、函数名完全相同,是在不同的作用域中;

6.宏函数和内联函数的区别?

①宏函数是预处理器对宏进行替代,内联函数是由编译器控制来实现的

②宏函数只是简单的文本替换,而内联函数是直接嵌入到目标代码中。

③宏函数不是真正的函数,没有参数类型检查,是不安全的,内联函数是真正的韩叔叔,有参数类型检查,更安全。

④宏在定义时要注意参数,一般用括号括起来,否则容易出现二义性,内联函数不会出现二义性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值