C++ 面试题归纳

学习自用 仅供参考 不定时更新学习内容

一.概念题:

1. C++与C的区别:

  • 从++名字来看,C++就是C的超集,是C的进化。
  • 从机制上来说,C是面 向过程的,是机构化编程语言。而C++是面向对象的编程语言,侧重对象而不是过程,侧重于类的设计而不是逻辑的设计。
  • 从适用方向上来说,C适合于对代码要求体积小效率高的场合,例如嵌入式;而C++适合上层的,复杂的。

2.多态的作用:

1.隐藏实现细节,让代码能够模块化;扩展代码模块,实现代码重用。

2.接口重用:简化编写。

3.struct与class的区别:

默认继承权限上,struct默认为public;class默认private。

4.面向对象的三个基本特征

封装:

抽象为类 private protected public 作用:保护与隔离

继承:为了实现复用

多态: 为了抽象 把问题区分的更加细致

5.转义字符

都使用/开头 后面可以跟特定字符 也可以是3个八进制数 或者两个十六位数

6.全局变量和局部变量的区别

1.生命周期不同:

局部变量只存在于局部函数内部,退出就不存在。

全局变量则跟随主程序创建而创建,摧毁而摧毁。

2.作用范围不同:

局部变量只能函数内使用,分配在栈区或者由用户开辟到堆区。 。

全局只程序全局都可以,分配在全局数据段

7.C和C++中struct有什么区别:

C中无继承思想默认public,结构体内不能定义函数,但可以有函数指针

C++有继承,能定义函数

8.重载,重写,重定义

重载: 函数名相同,但参数不同

重写:用于继承,子类重新定义父类虚函数

重定义:子类与父类函数名相同,屏蔽父类的函数

9.为什么要使用堆:

运行前不知道对象需要多大内存 ,不知道对象的生存期有多长

10.有了malloc/free,为什么还要new/delete?

malloc/free是C/C++的标准库函数,不在编译器控制权限内。无法构造动态对象,不能执行构造函数和析构函数。

new/delete是C++的运算符。执行构造函数和虚构函数需要完成动态内存分配和初始化工作。

11.引用与指针的区别

  • 引用必须被初始化,指针不用
  • 引用初始化后不能被改变,指针可以改变
  • 不存在指向空的引用,存在指向空的指针

12.函数模板与类模板的区别:

函数模板的实例化由编译程序在处理函数调用时完成的

类模板实例化必须由程序员指定

  • 类模板不支持参数类型自动推导
  • 类模板在模板参数列表中可以有默认参数

13.所有的运算符都能被重载吗?

有一些不允许:

数据类型不能(int,string)

不能重载 “.”

14.基类的析构函数不是虚函数,会带来什么问题?

导致派生类的析构函数不被调用,内存泄漏

15.模板和容器

模板是一种机制,容器是一种特定的类

16.深拷贝与浅拷贝

浅拷贝:简单的赋值拷贝操作

深拷贝:在堆区重新申请空间,进行拷贝

类内有堆区开辟的数据时,浅拷贝会导致内存重复释放

17.前缀++不能当左值,后缀++可以

18.异常处理try-catch

允许程序在遇到不可预见的问题时能够恢复或报告错误,而不是直接崩溃

三个关键词:

  • try:包裹可能抛出异常的代码块。
  • catch:捕获并处理特定类型的异常。
  • throw:用于抛出异常对象。
int  calculate(int a,int b)
{
	if (b == 0)
	{
		throw std::exception("Division by zero condition!");
	}
	return a / b;
}
int main()
{
	try
	{
		int a = calculate(100, 0);
		cout << "结果为" << a << endl;
	}catch (const std::exception& e) {
		std::cerr << "捕获到异常: " << e.what() << endl;
	}
	system("pause");
}

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值