1.就业方向:游戏行业、后端、嵌入式等,需求相对少于java,但仍是很值得学习的一门语言。
2.命名空间:
常见的命名空间有 using namespace std;此处的std就是C++的标准库里的命名空间。
命名空间的作用:命名空间可以让你自己创建一个独立的作用域,可以有效避免不同人写相同的函数名导致命名冲突。
创建命名空间:
namespace st
{
int rand = 1;
int add(int a, int b)
{
return a + b;
}
struct node
{
int rand;
char str;
};
}
此处创建了一个名叫st的命名空间,空间内包含一个整形变量rand,一个函数add,一个结构体。
调用命名空间:
void test()
{
printf("%d \n", st::rand);
printf("%d \n", st::add(1, 2));
struct st::node st;
}
此处是在函数内单独对每一个变量或函数说明其是命名空间st内的。
using st::add;
void test()
{
printf("%d", add(1, 2));
}
此处using st::add;用了部分展开,即从此往下调用add函数默认是调用命名空间st内的add函数。
using namespace st;
此处用了全部展开,此后调用命名空间内的变量、函数等可以忽略“st::"。
注意:当使用部分展开或全部展开以后,必须确保不会再出现相同名、相同函数参数的函数,否则仍会出现函数调用不明确的错误。
总结一下命名空间,就是类似额外开辟了一份单独的空间(作用域),然后定义了一些只能在这个空间内使用的成员。
2.函数重载:
函数重载的条件:1、函数名相同。2、函数的参数不同(形参类型不同或形参个数不同或形参顺序不同)。3、相同作用域。(注:返回类型不同不是重载的条件)
函数重载的作用:获得同名但是效果不一定相同的函数。
int add(int a, int b)
{
return a + b;
}
int add(double a, double b)
{
return (int)(a + b);
}
上述两个函数函数名均是add,但函数形参不同,因此是函数重载,此时根据传入参数的类型,编译器会选择合适的函数调用。
3.函数参数缺省
int add(int a=1)
{
return a+1;
}
函数缺省通常是在函数定义或者声明时(注:声明和定义中只能有一次用函数缺省),在形参的参数名后跟一个“=x”,此处x必须是常量或宏常量。此时使用该函数若不传这个参数则会默认参数的值是x,若传参数则参数的值就是传进来的。
函数缺省的注意事项:1.从左侧第一个缺省参数开始往右所有参数都必须是缺省类型。
2.函数使用的时候输入的数必须从最左侧的形参开始对应。不能出现第一个数对应形参第二个数等类似的情况。
在了解了函数重载和默认参数后,也许会产生一个疑问,以下代码是否可以成功调用:
int add(int a ,int b=2)
{
return a + b;
}
int add(int a)
{
return a + 1;
}
int main()
{
printf("%d ",add(1));
return 0;
}
首先两个add函数的参数个数不同、作用域相同、函数名相同,因此是函数重载,但此时只传了一个参数,到底是调用只有一个形参的 int add(int a),还是当做一个参数是默认的int add(int a,int b=2)?答案是编译器无法确定,因此会报错。
在本篇中,初步介绍了命名空间、默认参数和函数重载。