重温c++(c到c++)
bool类型
ture为真,flase为假,1为真,0为假,大小为一个字节。
引用& 引用 取别名 必须要初始化
取别名,就是对一个变量取别名
int a=32;
int &b=a;//那么这个b就是a的别名
b=66;//则a的值也会改变为66
指针和引用的区别:
1.指针是一个有内存的实体,引用只是一个外号。
2.引用是常量,常量必须初始化。
3,指针可以赋空值。
4,指针的内存唯一的,引用不唯一。
内联函数
通过内存膨胀来减少函数的跳转,空间换时间而函数是时间换空间。
在函数前面加上inline就是内联函数
inline void fun(){}
如果出现函数体的代码过长,如果有循环,不建议使用内联函数。
建议使用内联函数:简单的赋值语句,简单的返回语句(函数体少,使用评率高)
函数重载
构成重载:函数名一致,函数参数不同,位置不同。
int arr(int a,int b)
{
return a+b;
}
void arr(double a,double b)
{
printf("%lf",a+b)
}
这个arr函数构成函数重载。
但是值得注意的是,有的时候,函数重载也容易构成二义性的问题。
void a(int a){};
void a(float){};//这样就构成了二义性的问题
解决办法,直接在输入的时候写上参数类型,如a(1.36f);
函数的缺省参数(也就是形参有初始化的值)
1.参数的缺省只能由后往前缺省,依次缺省,不能由前往后
void fun(int a,int b=2,int c=3);//可以这样写
void fun (int a=1,b=2,c)//不可以这样写
2.参数的缺省,只有定义的情况下可以直接写在定义,如果有声明,只要在声明中缺省,定义不需要
3,参数的缺省如果和重载混合一起使用,一定要注意因为缺省参数导致的二义性。
new:是用来申请堆区内存的。堆区内存:是我们自己申请出来的内存所以要自己释放。
delete p:用来释放堆区内存。
定义:
int *p=new int;//申请一个int类型大小的堆区内存
*p=8;
cout<<*p<<endl;
int *q=new int(1010);//直接初始化为int的值为1010
cout<<*q<<endl;
int *e=new int[10];//申请十个int类型大小的堆区空间
for (int i=0; i<10; i++)
{
e[i]=e[i]+1;
}
for(int i=0;i<10;i++)
{
cout<<e[i]<<endl;
}
delete []p;//释放堆区空间;
e=NULL;
return 0;
memset();用来初始化内存的;
例如:
int *q=new int[10];
memset(q,0,sizeof(int)*10);//括号里分别是指针,0,字节大小。
for(int i;i<10;i++)
{
cout<<*(q+i)<<endl;
}
return 0;
注意:写完代码之后指针指针要赋空值。
野指针有指向,空指针没指向。
命名空间:再文件的基础上对文件里面的内容再次分类
定义:
namespace 空间名字 {成员};
例如:
namespace aaa
{
void fun()
{
cout<<"打开了赛博朋克2077"<<endl;
}
};
using namespace aaa;//打开命名空间,这样外部才能访问命名空间里面的内容
using aaa::fun();
::作用域符号,就是用来说明某个成员是属于某个事物;
当有重定义函数时就可以用::
不能在函数和类中定义。
string类类型:存字符
string str1="sadfhadhs";
str.at(i);//返回下标为i的元素的引用