命名空间
- 命名空间定义namespace;
- 命名空间的参数可以使用作用域限定符::直接访问;
- using用来展开命名空间 ;
- 命名空间可以嵌套;
- 命名空间名称可以重复,编译最后会将相同的命名空间整合在一起;
#include<iostream>
using namespace std; //展开命名空间
namespace Name //定义Name命名空间
{
int a = 10;
int sub(int x, int y)
{
return x - y;
}
namespace N1 //命名空间嵌套
{
int b = 5;
}
}
int main()
{
cout<<"输出a的值为:" <<Name::a<<endl; //采用为作用域限定符::指向命名空间中变量a
int z = Name::sub(9, 2); //指向命名空间中sub函数,进行调用
cout << Name::sub(9, 2) << endl;
cout << "输出b的值为:" << N::N1::b << endl; //指向嵌套的命名空间N1中变量b
system("pause");
return 0;
}
运行结果:
输入与输出
- 使用输入和输出需要头文件iostreamm;
- 输入 cin>> a>>endl;
- 输出 cout<<a<<endl;
缺省参数(全缺省和半缺省)
- 全缺省:所有参数又都默认值
- 半缺省:一部分参数有默认值:从右往左依次给值
//全缺省:所有参数又都默认值
int Func(int x = 1, int y = 2)
{
return x + y;
}
//半缺省:一部分参数有默认值:从右往左依次给值
int Func2(int x, int y = 2, int z = 3)
{
return x + y + z;
}
int main()
{
cout << Func() << endl; //计算Func函数
cout << Func(2) << endl; //将2赋给x,计算Func函数
cout << Func2(1) << endl; //计算Func2函数
cout << Func2(2,4) << endl; //从左向右赋值计算,即将2赋给x,4赋给y,计算Func2函数
system("pause");
return 0;
}
运行结果:
函数重载
- 函数重载定义:在相同的作用域内,函数名称相同,但是参数列表不同 ;
- 参数不同:参数的数量、参数的顺序、参数的类型
int F(int x)
{
return x;
}
int F(float x) //参数类型不同
{
return x;
}
int F(int x, float y) //参数数量不同
{
return x + y;
}
int F(float x, int y) //参数顺序不同
{
return x - y;
}
extern “C”
- extern:声明的意思。extern"C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。因为C++兼容C语言,有时候需要以C语言风格的代码,因此加上extern"C"后声明这是C语言风格的代码,会指示编译器这部分代码按C语言的进行编译;
- struct 结构体,在C++里可以声明一个类,但是在C语言里面是结构体
引用 &
- 引用作用:就是直接传递该对象本身,不以拷贝的形式,相当于给对象取别名
- 指针和引用区别:指针不用初始化,而引用需要初始化;只有多级指针,没有多级引
用
//Demo(b) 出入的就是b的本身,a就是b,b也是a
int Demo(int& a) {
return ++a;
}
//Demo2(b) Demo2(int a = b)把b的值给了a,这就发生了拷贝的过程,b还是b
int Demo2(int a)
{
return ++a;//a+=1
}
int main()
{
int b = 2;
int c = 2;
cout << "改变前b值" << b << " 改变前c值" << c<< endl;
Demo(b);
Demo2(c);
cout << "改变后b值" << b << "改变后c值" << c << endl;
int x = 10;
int& y = x;
int z = x;
++y;
++z;
cout << "x = " << x << endl;
//指针计算的是指针自己的大小,在32位机器下是4个字节
//引用计算的是该对象本身的大小
long long ato = 20;
long long* p = &ato;
long long& q = ato;
++p;
++q;
cout << sizeof(p) << " " << sizeof(q) << endl;
//AutoDemo();
system("pause");
return 0;
}
auto关键字
- 类型占位符
- 不能作为函数参数
- 不能定义数组
void AutoDemo()
{
int arr[] = { 1,2,3,4,5 };
int a = 10;
auto b = a; //auto可以通过a的类型推断出b的类型
auto c = 10;
for (auto e : arr) //范围for循环
{
cout << e << endl; //换行输出数组arr内的元素
}
}
int main()
{
AutoDemo(); //调用AutoDemo()函数
}