学习自用 仅供参考 不定时更新学习内容
一.概念题:
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");
}