C++能提高程序的运行效率,节约更多的资源。
C++是编程语言的联盟
bool
C语言中使用bool需要引<stdbool>,定义了0和1分别为true和false
C++中 ,bool和int可以相互转化
int -> bool 0为false,非0为true
bool -> int true ==1 false==0
const
将变量常量化,编译器在语法层面上进行检测。
使用#define 定义的都是真常量
域运算符 Domain Operator
#include<iostream> //标准C++库
#include<stdio.h>//c 继承来的
#include<cstdio>//C 继承来,符合 C++标准
int num =100; //占用全局空间
int main()
{
int num =10; // 栈空间
retrun 0;
}
域作用符 : :
当::前面为空时代表全局空间
std:: 命名空间为std ,所有的函数和变量都是标准库中的函数和变量
new和delete
在C语言中进行堆操作的时候调用的是malloc 和 free
C++ 使用new 和 delete
int * pNum = new int (100) 分配一个int类型 的空间,并且值为100
delete pNum;
int *pArray = new int [10]; // 分配连续的空间
delete[]p; // 释放时为数组
new 和 delete 是运算符
malloc和free是函数
Overloaded 重载
重载可以使用相同的函数名,函数的参数是不同的
编译器会根据参数类型来进行匹配,虽然函数名相同,其实上是完全不同的几个函数
如何重载
编译器会保存符号表,编译器会知道当前变量,以及占用的空间,解析方式(数据类型)
记录函数的参数类型,然后二者匹配。把任何一个函数名进行命名粉碎,把函数名变成函数名加上参数类型来支持重载
函数参数的顺序不一样可以构成重载
重载让我们非常方便的进行一系列的调用,同一个功能的函数不用起多个名字,解决了因为数据类型不同出现的问题。
重载匹配规则
精准匹配 尽量使用
提升匹配 char -> int float -> double
类型转换匹配 int -> unsigned int
重载使用过多会出问题,根据业务需求决定
默认实参
void MyCount(char *str , bool line="true")
必须出现在整个函数的最右边,
二义性:编译器无法找打与之对应的唯一函数
解决二义性:唯一匹配;调用时确定精确参数。
内联函数
inline
调用时,不会新建栈,将代码展开,提高了运行的效率
生成的体积会膨胀。
根据栈的使用情况来解析,使用的空间不会占用太多
C++风格类型转换
int num = static_cast<int>(1.0003);//不是强制转换,表示转换c++风格
经常使用在基类指针指向派生类指针
reinterpret_cast<> 强制转换 二进制层面的转换
引用
在某一个方法之类修改方法之外的值,必须使用指针,指针使得已经要修改的数据类型变成了指针类型。
使用引用必须指向一个变量
int val =100;
int &refval = val; //引用是变量的别名,没有独立空间,共用同一个空间。 (数据类型无法修改)
int *pVal = &val; // 指针拥有独立空间, 指向某一个变量 弱关联(指向的变量可修改)
const int num = 500;
const int& refnum = num ; //用const 引用接收
按引用传递
将形参实参化。将参数作为变量使用,作用于外部的
函数之间的值传递是通过栈来完成的
将引用作为返回值 ,传递类的需求使用引用来代替,但是引用无法指向堆空间,只有指针能指向
int &Index(int index)
{
return array[index];
}