命名空间
命名空间内的变量只能在命名空间中使用,别处想要使用的话需要特殊声明:
- 1.命名空间+::+成员
- 2.using 命名空间::成员
- 3.展开命名空间:using namespace 命名空间(前提:全局没有定义过)
以下是代码实例讲解:
using namespace std;
namespace N1
{
int a = 0;
int b = 1;
void fun1()
{
printf("N1:fun1()\n");
}
}
int a = 10;
void test()
{
//全局:a
printf("a: %d\n", a);
//命名空间中成员的访问形式:
//1.命名空间+::+成员
printf("N1::a : %d\n", N1::a);
//2.using 命名空间::成员
using N1::b;
printf("N1::b : %d\n", b);
//3.展开命名空间:using namespace 命名空间(前提:全局没有定义过)
// 命名空间下的所有成员全部都暴露在全局作用域中,会和全局域中的成员发生混淆
using namespace N1;
printf("N1::a : %d\n", a);
}
在C++中,头文件中定义的所有成员都属于std命名空间
因此在引用cin、cout时需要前面加上命名空间::
如果不想每次都加 std:: 也可以直接在最开始展开命名空间:using namespace std;
#include<iostream>
void test()
{
//C++头文件中定义的所有成员都属于std命名空间
//cin:支持连续输入,输入顺序:从左向右
std::cin >> a >> a >>a;
//cout:支持连续输出,输出顺序:从左向右
std::cout << a << "" << "zfc" << a <<"\n";
using namespace std;
cin >> a;
cout << a;
cout << endl; //endl:end line ->换行
}
缺省参数
缺省参数:定义函数时,给参数一个默认值
全缺省:所有参数都有默认值
半缺省:参数从右向左填写,中间不能有空值
声明和定义只能在一个地方设置默认值
void fun(int a)
{
cout << a << endl;
}
//定义函数时,给参数一个默认值:缺省参数
//全缺省:所有参数都有默认值
//半缺省:参数从右向左填写,中间不能有空值
//声明和定义只能在一个地方设置默认值
void fun2(int a, int b);
void fun2(int a = 10, int b = 2)
{
cout << a << endl;
cout << b << endl;
}
void test2()
{
fun(100);
fun2(); //不传值时,使用默认值
}
函数重载
函数重载:函数名相同,参数不同:参数个数、顺序、类型
在C语言中如果需要传入不同的参数,则需要调用定义不同的函数
//C语言中传入不同类型参数,需要写对应类型的函数
int addInt(int a, int b)
{
return a + b;
}
char addchar(char a, char b)
{
return a + b;
}
double addDouble(double a, double b)
{
return a + b;
}
C++实现可以通过对同一函数传入不同类型的参数(C语言中,同一作用域,函数名不能重复)
int add(int a, int b)
{
return a + b;
}
char add(char a, char b)
{
return a + b;
}
double add(double a, double b)
{
return a + b;
}
以下示例:函数名相同,参数不同:参数个数、顺序、类型
void fun1(char a, int b)
{
cout <<"fun1(char, int)" << endl;
}
//参数顺序不同
void fun1(int b, char a)
{
cout <<"fun1(int, char)"<< endl;
}
//参数个数不同
void fun1(char a, int b, char c)
{
cout << "fun1(char, int, char)" << endl;
}
void test()
{
int a = 1;
char b = 'b';
fun1(a, b);
fun1(b, a);
fun1(b, a, b);
}
错误示例:只有返回值类型不同,不能构成函数重载,程序会报错
//只有返回值类型不同,不能构成函数重载
void fun2(int b, char a)
{
cout << "fun1(int, char)" << endl;
}
int fun2(int b, char a)
{
return a;
}