目录
前言
C++ 是一种高级语言,它是由 Bjarne Stroustrup 于 1979 年在贝尔实验室开始设计开发的。C++ 进一步扩充和完善了 C 语言,是一种面向对象的程序设计语言。
一、C++是什么,和C有何区别?
C++(C plus plus)是对C语言的扩充,C++是在C语言的基础上扩充得来的。当然,这并不是说C++就一定比C语言高级,两者的编程思维不同,应用的邻域也不同。简单的说,C语言是一种面向过程的语言,而C++是一种面向对象的语言。(并不是说C语言就一定不能面向对象)
面向过程:面向过程编程就是分析出解决问题的步骤,然后把这些步骤一步一步的实现,最后在一个个调用来实现程序的运行。
面向对象:面向对象编程就是将一个程序分解成一个个对象,每个对象都有自己的行为,当我们需要它做某个事时就调用相应的对象。
面向对向不是很好口头解释和理解,举2个例子;
1.洗衣服时
面向过程:放入衣服后,加洗衣粉,清洗衣服,观察是否干净,继续清洗,直到干净后取出。
面向对象:把衣服放入洗衣机,打开洗衣机,洗好后取出。(这里洗衣机就是对象)。
2.象棋系统
面向过程:开始游戏,红棋先走,绘制画面,判断输赢,轮到黑棋,绘制画面,判断输赢,重复前 面的过程,输出最终结果。
面向对象:双方(两者的行为是一样的)、棋盘系统(负责绘制画面)、规定系统(规定输赢、犯规等)、输出系统(输出赢家)。
C语言更适合处理较小规模的程序,,对于大规模的程序,C语言就不是很适合了。
二、C++使用
1.C++中的函数
1.带默认值的函数
在C++中,带默认值的函数即使不传参也会按默认值参数运行。(等号赋值)
可以所有都带默认值,也可以只设置部分参数。(只有部分参数带默认值时,带默认值的必须放在参数栏末尾)
默认参数只需要在声明或定义时说明,不需要2者都说明。
2.带占位参数的函数
主要是为了函数以后的扩展功能,解决C中不规范的的函数传参。
在定义的时候只写类型,不写变量名,故使用者无法使用这个参数,但会函数的使用没有影响。
2.命名空间
用于解决符号冲突
namespace <name>{
<代码>
}
例如
namespace my{
int a=10;
}
int main
{
cou<<my::a<<endl;
return 0;
}
全局引用
using namespace <命名空间名>
一个命名空间可以取多个别名,使用起来与原名无区别。
匿名空间:定义时可不需要取别名,可以直接使用里面的函数或变量,但只在当前文件生效。
3.函数重载
指在同一作用域内,可以有一组同名函数名,不同参数的函数
通常用来命名一组功能相似的函数,这样可一减少函数名的数量提高程序的可读性。
规则:
1.函数名必须相同。
2.参数列表必须不同。(个数,类型,排列顺序)
3.返回值可同也可不同,但仅返回值类型不同不足以成为函数的重载。
底层原理:编译器会将重载函数设置成不同函数名,根据参数与个数进行匹配。
4.函数的引用、
j简化了指针操作
引用是给一个变量或对象取别名,对引用操作与对其绑定的操着一样。
声明的同时必须初始化,且初始化后不能改变引用空间的位置。
两者类型必须一致。
不能将已有的引用名作为其他变量或对象的名字或别名。
原理:引用时编译器会在底层生成个指针并自动进行*运算。
主要用于函数的传参。
new:申请内存并初始化。
delete:释放内存并销毁对象。
int *p=new int[5];
delete [] p;
int *p=new int;
delete p;
p=NULL;
与malloc/free区别:
1.malloc/free是标准库函数,new./delete是C++操作符。
2malloc/free需要手动计算类型和大小,且返回void*,而new./delete可以自己计算类型和大小,根据类型返回相应的指针类型。
3.malloc/free只负责分配/释放空间,new./delete会调用构造函数与析构函数,用于初始化对象和销毁对象。
new./delete的实现是基于malloc/free的。