1、C++
C++ 是一种通用的、面向对象的编程语言,它是 C 语言的扩展,并支持高级特性如泛型编程、模板、继承和多态等。C++ 由 Bjarne Stroustrup 在 1980 年代初期创建。C++ 既可以作为系统编程语言,也可以用于开发应用程序和库,它具备高效性、可移植性、可扩展性和可重用性等优势。C++ 还是许多流行开源项目如操作系统内核和数据库引擎的首选语言。另外,C++ 可以与 C 语言混合编程,因为它兼容 C 语言标准库并支持低级操作,这样使得C++ 在保持高级特性的同时仍能兼顾底层程序设计和性能优化需求。
(1)新增自定义的类型转换
C语言:
实现基本数据类型的转换
对于非基本的数据类型转换,不能实现转换
C++:
实现基本数据类型的转换
实现自定义类型的转换,例如:类类型的转换
(2)严格的数据类型检查
C++是一门静态型语言,如果程序有错误,在编译阶段就会将错误提出来
例如:
C语言: C语言的类型检查不是很严格 在某些场景他仅仅是报警告但是程序依旧可以运行。
(3)新增变量引用
引用:
符号:&
解释:
引用实质上是给已经存在的变量取一个别名
使用格式:
数据类型 & 别名=已经存在的变量名 ; //数据类型:基本数据类型(int ,char),自定义类型:类类型
例如:
int b=20;
int & a = b; //给存在的变量b取一个别名输出结果为a和b的值都为20;#include "iostream" using namespace std; int main() { int a=20; int &b=a; cout<<"a的值"<<endl; cout<<"b的值"<<endl; }
注:
(1)编译器不会给引用变量另外开辟空间
(2)引用类型的变量一旦存在必须对其进行初始化工作
(3)引用类型的变量必须与一个已经存在的变量进行绑定
面试题:指针与引用的区别指针是一个变量,保存了一个内存地址,可以通过解引用操作符
*
来获取该地址处存储的值。指针可以为空(nullptr),也可以指向任何类型的对象。指针可以被重新赋值,使其指向其他对象或者空。引用是一个别名,它提供了对已存在的变量的另一种名称。引用必须在声明时初始化,并且不能重新绑定到其他变量。引用本身并不占据额外的内存空间,它直接引用了变量所在的内存位置。
实现两个数的交换,要采用多种值传递的方式实现(函数参数值传递)
#include "iostream" using namespace std; void change_value(int a, int b) { int temp=0; temp=a; a=b; b=temp; } void change_value1(int *a , int *b) { int temp; temp=*a; *a=*b; *b=temp; } void change_value2(int &a , int &b) { int temp=0; temp=a; a=b; b=temp; } int main() { int m=10; int n=20; //change_value(m,n); cout<<"交换之前m:"<<m<<endl; cout<<"交换之前n:"<<n<<endl; change_value2(m,n); cout<<"交换之后m:"<<m<<endl; cout<<"交互之后n:"<<n<<endl; //cout<<"a的地址:"<<&a<<endl; //cout<<"b的地址:"<<&b<<endl; //cout<<"c的地址:"<<&c<<endl; //cout<<"a="<<a<<endl; return 0; }
(4)新增函数带默认值参数
函数中的参数在声明的时候带了一个默认值
格式:
函数返回值 函数名(参数1 , 数据类型 标识符=初始值)
{}
例如:
void function(int a , int b=20) //参数b带默认值
{
}
如何调用带默认值的函数?
(1)不更新默认值的形式调用
例如:
function(40) //正确
(2)更新默认值的形式调用
例如:
function(40,30);//正确写法上,要将不带默认值的参数放在带默认值的参数前
(5)新增了函数重载以及运算符重载
运算符重载:略
函数重载:
是指函数名相同,函数的参数类型或参数个数或参数的顺序不同,即可发生函数重载,c语言不能发生函数重载。 函数重载与函数返回值无关。C++语言:
支持函数重载
练习:
有一个同名函数,实现的功能是不同类型的数据进行交换
内联函数:
声明:
关键字:inline //用于声明一个函数是内联函数格式:
inline 函数返回值 函数名 (参数列表)
{}
例如:
inline void function()
{}
内联函数的使用:
针对使用频度高的代码,且短小精简
提高了编译器的执行效率面试题:
对于使用频度高的函数,怎么设置才会提高编译器的执行效率?C语言怎么设置?C++怎么设置?c语言使用宏定义
c++使用内联函数
(6)新增了智能指针
作用是防止内存泄露,即将用户用裸指针开辟的堆空间的权利交给智能指针去管理
(7)新增了异常处理机制
C++可以主动产生异常,也可以主动捕获异常并处理
2、C++文件架构及后缀
文件架构:
(1)主程序文件:cpp
在该文件里包含了一个main函数,就称该文件为主程序文件
编译器在执行时,执行的是主程序文件
放置变量的初始化,函数的定义或实现,类的声明或实现等等
(2)头文件:.h
该文件里主要放置变量的声明、函数的声明、类的声明等等
(3)源文件:.cpp
该文件里主要放置变量的初始化,函数的定义或实现,类的成员函数的实现等等
文件后缀:
以windows为主:
C++后缀:.cpp
以linux为主:
C++后缀:
.cpp、.cs、.css等等
常用的后缀是.cpp
编译器:
Linux中C语言文件使用gcc进行编译
LInux中C++文件使用g++进行编译
编译器的执行流程:
(1)预处理
工作内容:
a、将源文件以外的内容全部加入到源文件中
b、删除掉注释
c、进行宏替换工作
d、条件编译
(2)编译
工作内容:
a、将用户编写代码转换成汇编语言
b、检查用户编写代买是否符合语法规范
(3)汇编
工作内容:
a、将编译阶段翻译的汇编语言转换为机器语言
(4)链接
工作内容:
a、生成可执行文件
面试题:
静态库和动态库的区别?链接方式:静态库在编译时被完全复制到可执行文件中,与可执行文件链接为一个独立的可执行文件;而动态库在运行时被加载到内存中,并由多个可执行文件共享使用。
3、C语言和C++的区别
编程思想上:
C语言:面向过程的语言,侧重点是在于过程
C++:既面向过程也面向对象,C++的侧重点是在于对象
面向对象编程:
将一切事物看成是对象,一切皆对象
从使用上:
参考C++是C的增强
4、了解的基本术语(1)类
类是用于描述事物的特征和行为
(2)对象
对象是类的实例化的过程
(3)特征
是指变量或属性、成员变量
(4)行为
是指函数或方法、成员方法
(5)继承与多继承
一个新的类共享一个或多个已经存在的类的方法和属性
(6)聚合或组合
一个类包含了另外一个类的对象,称之为“组合或聚合”
(7)静态绑定
一个函数或表达式的地址在编译时就已经确定,称之为“静态绑定”
(8)动态绑定
一个函数或表达式的地址在运行时才确定,称之为“动态绑定”
(9)多态
一种接口,多种实现方法5.介绍第一个C++程序
#include "iostream" //#include宏,用于包含其它的库文件 //库文件:iostream //输入/输出流类:包含了输入流(用于输入数据)和输出流(用于输出数据) //iostream i:input o:output stream:流 //iostream : istream(输入流)和ostream(输出流) //istream:对象:cin ---- istream cin //ostream:对象:cout ---- ostream cout //符号:<> 或 “” //<>括号括起来的库:编译器首先是从C++标准库寻找库文件,然后再从项目中寻找该文件 //“”括号括起来的库:编译器首先是从项目中寻找库文件,然后再从C++标准库中寻找该文件 //iostream后面没有.h后缀 //如果使用C++标准库里提供的库文件,则不需要加上后缀.h //如果使用用户自己定义的库文件,则需要加上后缀.h //using namespace std;//使用的是C++提供的命名空间 //命名空间里存放了C++实例化的流对象:cin、cout、endl、cerr、clog等等 /* int main() //程序的入口地址 { cout << "hello world" << endl;//第一个C++代码 cout输出流对象:将数据从内存里取出来输出到控制台或显示器 endl:结束换行 符号“<<”(输出符号:数据从内存流向控制台):在C语言中表示移位运算符,在C++中对该运算符进行重载,表示数据的流动方向 符号“>>”(输入符号:数据从控制台流向内存):在C语言中表示移位运算符,在C++中对该运算符进行重载,表示数据的流动方向 “//”表示行注释 表示块注释 快捷注释:ctrl+shift+/ return 0; } */ //#include "iostream" using namespace std; int main() { cout << "hello world" << endl; return 0; }