C++:支持面向对象编程,泛化编程和过程化编程。
应用领域:
1.服务器端开发
2.游戏引擎的开发
3.虚拟现实:VR等
4.数字图像处理
5.网络软件
........
#include包含头文件时使用 “ ”和< >的区别
符号“ ”: 编译器在执行应用程序时,首先会在当前项目里寻找库文件,然后去标准库里寻找。
符号 < >: 编译器在执行应用程序时,首先会在当前标准库里寻找库文件,然后去项目里面去寻找。
c/c++的程序编译流程有哪些?具体做了什么样的工作?
预处理
a、将除源文件以外的内容全部加入到源文件中。
b、进行宏替换工作:#define num 10
c、删除注释
c、进行条件编译:#ifndef # define #endif等等
编译
a、将用户编写的代码翻译成汇编语言
b、检查用户编写的c/c++代码是否符合语法规范
汇编
a、将编译阶段生成的汇编语言转换成机器语言(二进制)
链接
a、连接目标代码,生成可执行程序
malloc / free和new / delete的区别
1.malloc/free是函数,new/delete是操作符
2.malloc申请空间时需要手动计算空间的大小,new申请空间时不需要手动计算控件的大小
3.malloc申请空间时需要强制类型转换,new申请空间时不需要强制类型转换
4.malloc申请空间时没有对空间进行初始化工作,new申请空间时对申请的空间进行了初始化工作
5.malloc申请空间时适用于基本的数据类型,而new申请空间时可以自定义数据类型
6.malloc只会申请空间,不会进行其他工作,free只会释放空间,不会进行其他工作,而new不仅会申请空间还会执行类的构造函数的工作,delete不仅会释放空间还执行了类的析构函数的工作。
指针与引用的区别:
1.指针声明时,可以不用进行初始化工作,而引用一旦声明必须进行初始化工作
2.指针可以指向多个实体,而引用只能指向一个实体
3.编译器会为指针分配内存空间,但是不会为引用分配内存空间。
浅拷贝和深拷贝
1.浅拷贝:用已存在对象初始化新的对象时,只拷贝变量名和值(没有指针向对空间开辟空间的情形)
2.深拷贝:指类体里含有指针对象并开辟了堆空间,用已存在的类初始化新的类,深拷贝不仅拷贝指针对象名,还会重新复制一份指针对象指向新的地址
普通成员函数与构造函数的相同点和不同点
不同点:
1.构造函数没有返回值,而普通成员函数有返回值
2.构造函数名是类名,而普通成员函数是任意标识符
3.构造函数在创建类的对象时会自动调用,而普通成员函数需要手动调用
4.构造函数的作用一般是初始化类的成员变量,而普通成员函数只能通过传参的形式。
相同点:
1.普通成员函数和构造函数都是函数
2.都可以携带参数或者不携带参数
3.都可以发生重载
重写、覆盖/隐藏、重载的区别?
1.重写:是将原来的内容重新书写一边
2.覆盖/隐藏:将原来的内容进行覆盖或隐藏(继承或多继承)
当子类中与父类没有相同的成员时,继承之后,子类会隐藏父类的成员
当子类中与父类有相同的成员时,继承之后,子类会自动屏蔽或覆盖与父类相同的成员。
3.重载:函数名相同,函数的参数(参数类型|参数个数|参数顺序)不同
运算符重载:指将基本的运算符赋值给新的数据类型的计算,并将该运算符强制修饰为新的函数形式。
不能进行重载的运算符有:" . " " .* " " ->* " " :: " " sizeof " " ? : " " # " 七个
关键字 operator
格式: 返回的类型 operator 重载的运算符 ( const 类名 & obj) { }
抽象类:含有纯虚函数的类
纯虚函数 : 令虚函数等于0,表示为” 纯虚函数 "
例如:virtual void run()=0;
异常:
1)catch捕获异常是通过比较catch的参数类型与异常的类型
2)一个try后面紧跟需要至少有一个catch块
3)try里如果确定有异常产生,但是try后面没有写捕获该异常的catch块,那么该异常会被推送到上一级的异常处理,假如上一级也没有处理该异常的catch块,那么继续推送到上一级,如果最后到main函数里都没有处理该异常的catch块,那么会调用windows的termlate来终止该程序
4)异常捕获的流程,首先是try后面的第一个catch块去匹配异常,如果没有匹配上,继续往后的catch进行匹配
5)catch块里有3个英文字符类型的小点“.”,表示捕获所有异常,一般将它放置到catch块的最后面
6)try....catch可以发送嵌套,嵌套的try..catch异常的捕获,遵循第3)步骤