C到C++
C++相比C语言来说,多了两个核心,五个内容:1、面向对象的思维;2、模板(泛型编型)1.bool 2.引用 3.内联 4.重载 5.缺省参数
变量
数据类型 bool
-
布尔 占1个字节 取值:true false
bool isMax(int a, int b){return a > b;}
引用 为变量取别名
-
typedef int HP;//为类型取别名
-
*三种:乘号,解引用,指针
-
&三种:位与,取地址,引用
void mySwap(int a, int b)//值传递{int temp = a;a = b;b = temp;}void mySwap(int *pa, int *pb)//址传递{int temp = *pa;*pa = *pb;*pb = temp;}void mySwap(int &a, int &b)//引用传递{int temp = a;a = b;b = temp;}
-
函数的值拷贝,如果是一个结构变量,尽量使用指针
-
在C++里面,除了指针拷贝之外,还可以使用引用。使用指针和引用效率是一致
-
指针和引用的区别:
1、指针是一个有内存的实体,引用只是一个外号 2、引用是常量,常量必须初始化赋值 3、指针可以赋空 4、指针内存唯一,引用不唯一
函数
内联函数
-
通过内存膨胀来减少函数的跳转
函数前面加关键字inline (空间换时间)inline int myAdd(int a, int b){return a + b;}
-
内联的缺点
1、如果函数内的函数体代码比较长,不建议内联2、函数体内有循环,不建议内联什么时候用内联:简单的赋值语句,及返回数据(函数体极少,使用频率高,用内联)int playHp = 0;inline int GetIndex(int num){return num % 10;}inline void SetValue(int v){playHp = v;}
函数重载
-
函数
把代码的模块化为工具,以此增加代码的复用性
int myAdd(int x,int y)//计算两整型数据和的工具函数{ return x+y; }
-
函数重载
一个函数名对应多个函数体,什么情况下构成重载:满足两个条件:
-函数名一致
-参数列表不一致
1.参数对应位置类型不同2.参数的个数不同
例如
int myAdd(int x,int y) double myAdd(double x,double y) int myAdd(int x,int y,int z){ { {return x+y; return x+y; return x+y+z;} } }
注意:和函数返回值没有关系
-
重载的应用
#include<iostream>using std::cout;//using namespace std;using std::endl;//前一种命名空间方式要安全int myAdd(int x,int y){return x+y;}double myAdd(double x,double y){return x+y;}int myAdd(int x,int y,int z){return x+y+z;}int main(){cout<<myAdd(1,2)<<endl;cout<<myAdd(1.1,2.2)<<endl;//注意小数在编译过程中,会被看作double类型,float类型需要在小数后加fcout<<myAdd(1,2,3)<<endl; return 0;//使用重载函数时,注意类型转换带来的错误}
函数缺省参数
-
缺省参数
函数在定义形参时给出初始值
int myMul(int x,int y=9){return x*y;}
-
注意事项
-参数的缺省只能从后往前,依次缺省,不能从前往后
int myMul(int x,int y=9,int z){函数体}//错误的写法
-参数的缺省,在只有定义的情况下可以在写在定义上,如果有声明,只要在声明中缺省,不要在定义中缺省
#include<iostream>using std::cout;using std::endl; int myMul(int x,int y=9);//函数声明int main(){cout<<myMul(4)<<endl;return 0;}int myMul(int x,int y=9)//函数定义{return x*y;}//编译报错:重定义默认参数 : 参数 2
-函数的参数缺省与重载混合使用时,一定要注意参数缺省导致重载的二义性
#include<iostream>using std::cout;using std::endl;int myMul(int x,int y){return x*y;}int myMul(int x,int y,int z=9){return x*y*z;}int main(){cout<<myMul(2,3)<<endl;return 0;}//提示错误:对重载函数的调用不明确
-
缺省参数的应用
#include<iostream>using std::cout;using std::endl; int myMul(int x,int y=9){return x*y;}int main(){cout<<myMul(4)<<endl;cout<<myMul(4,6)<<endl;//6会覆盖9return 0;}