1、C++基本概念
C++语言特点:
兼容C语言的特性,保留C的性质,添加新的特性(面向对象),是C语言的超集
C++应用领域:
服务器
科学计算
游戏引擎
图形应用
2、C++编译与编写
1、C++文件
C++源文件: .cpp
C++头文件:.h
C++执行 ,以 main函数作为开始
如果使用C库函数,则头文件使用新的表示方式
#include <cxxxx>
编译C++程序:
g++ xxx.cpp
2、C++对C的扩展
1、强制类型转换
C:(类型)变量值
C++:类型(变量/值)
2、内联函数
内联函数:把函数设计为内联函数后,当调用函数时,则函数的功能代码在对应调用位置进行展开执行,避免函数的跳转执行(编译时);则函数运行多次定义
语法:
inline 返回值类型 函数名(参数列表)
{
函数体
}
函数设计为inline函数,由编译器来实现展开,能否展开编译器决定
相比于普通函数,耗时比较少,效率比较高
在声明内联函数时的要求:
1、内联函数一般只适用于短小,且重复率比较高
2、内联函数一般不放循环体等耗时操作
3、引用&
引用:
是指已经存在的变量,另取一个别名,引用变量和已知变量共用同一段内存空间,代表同一个变量
语法:
数据类型 & 引用名 = 变量名;
注意:
1、引用变量一旦定义就必须要进行初始化,表示对哪个变量取别名,之后都不可能改变:引用变量是哪个变量的别名
2、引用变量初始化完成之后,所有的操作都是对引用变量进行操作,而不是重新赋值取别名
函数的参数为引用:
函数的参数是实参的别名
函数的返回值为引用:
返回值为变量的别名,返回对应的变量
引用和指针的区别:
1、定义指针时,可以不进行初始化,可以存储为多个地址,引用必须进行初始化(引用只能绑定上一个变量,之后都是这个变量的别名)
2、指针会分配内存空间,存储地址,引用不会额外分配空间
4、函数参数默认值
是指声明一个函数时,如果函数带参数,C++运行可以对参数先设置一个默认值(初始值),当调用时,如果对对应的参数没有传递实参,则使用默认值参数值
默认值的添加:
从后往前添加,函数的参数在添加前一个参数的默认值时,要保证之后的参数都有默认值
在调用函数设置实参时:
从第一个开始,依次往后添加实参,遇到默认值就用实参替换
语法:
返回类型 函数名(参数1,参数2,参数3 = 值,参数4 = 值)
{
}
注意:
如果函数有多个参数,并且其中有带默认值的参数,那么带默认值参数不能放在不带默认值参数之前
5、函数重载
函数重载:
在C++中,在相同作用域允许函数名相同,函数的参数(参数的类型、参数的个数)不同
注意:当函数参数存在默认值时:带默认值参数的函数可以使用默认值也可以不使用默认值,这一个函数就代表多个函数
如:
int add(int a,int b);
int add(int a);//函数重载
int add(int a,float b);//函数重载
int add(int a,int b,int c);//函数重载
float add(int a,int b);//不是函数重载,错误
6、名字空间
在程序中定义多个相同的标识符名字,在程序中需要区别相同名字的标识符
名字空间(命名空间):
在全局范围内取出一块区域并对其进行命名,C++会将该区域赋予一个作用域,可以把有冲突的标识符存储在这个名字空间作用域中
名字空间语法:
namespace 名字空间名称
{
冲突的内容
变量
函数
结构体
类
}
通过名字空间把冲突名字分别存储到不同的名字空间中,解决冲突(属于不同的名字空间作用域)
作用域运算符 ------ :: 表示访问某个作用域中的成员
对名字空间的内容访问:通过名字空间进行访问
1、使用名字空间成员时,通过作用域运算符访问
名字空间名称 :: 名字空间成员
2、提前声明要使用名字空间成员,通过关键字 using 声明
声明:
using 名字空间名称::名字空间的内容;//告诉编译器,如果之后出现了 指定的内容,就表示使用的名字空间名称中的对应内容
3、提前编译指定使用某个名字空间
编译指令:
using namespace 名字空间名称;//告诉编译器,只要之后有内容和 名字空间中的内容同名,就表示使用的是名字空间中的对应内容
7、动态内存
C语言:malloc、free
C++语言:new、delete
动态内存分配:
指程序在运行时才分配内存空间,称之为动态内存分配。
C++提供运算符:new/delete用于动态内存的开辟和释放(new:申请空间;delete:释放空间)
1、使用new申请内存空间
运算符:new,申请以 数据类型为单位申请
new + 数据类型 -------运算的结果就是申请空间的首地址
new + 数据类型[个数]--------返回整个空间的首地址
new在申请时,可以进行初始化
new + 数据类型(值)
new + 数据类型[个数](值1,值2,......)
2、使用delete释放内存空间
运算符:delete,释放申请的空间
delete + 首地址 :释放单个空间
delete + [] 首地址 : 释放申请的多个空间