命名空间
命名空间的概念:在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将
都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名污染,namespace关键字的出现就是针对这种问题的
例如下面这个程序:
#include<stdio.h>
#include<stdlib.h>
int rand = 0; //rand()是随机数生成的函数
int main()
{
printf("%d\n", rand);
return 0;
}

命名空间的定义
//普通的命名空间
namespace chen1
{
int a = 0;
int b = 1;
int Add(int x, int y)
{
return x + y;
}
}
//命名空间可以嵌套
namespace chen2
{
int a = 5;
int b = 10;
int Sub(int x, int y)
{
return x - y;
}
namespace chen3
{
int a = 100;
int b = 200;
}
}
//命名空间是可以同名的,编译器最后可以合成到同一个命名空间中
namespace chen1
{
char ch = 'c';
}
如何使用命名空间呢?
方法1:加命名空间名称(例如上面的chen1,chen2)和作用域限定符(::)
int main()
{
//printf("%d\n", a); // 这里会报错
printf("%d\n", chen1::a); //正确使用方式
return 0;
}
方法2:使用using关键字将命名空间中的成员引入
using chen1::b; //可以理解为用using将命名空间chen1中的b放出来
int main()
{
printf("%d\n", chen1::a);
printf("%d\n", b);
}
方法3:直接将命名空间引用
using namespace chen1; //就是将命名空间chen1放出来
int main()
{
printf("%d\n", a);
printf("%d\n", b);
printf("%d\n", Add(1, 2));
return 0;
}
C++的输入和输出
cout 是标准输出(控制台)
cin 是标准输入 (键盘)
使用必须包含头文件 <>和放出标准命名空间std
#include<iostream>
using namespace std;
int main()
{
cout << "hello world" << endl; //endl 就是换行符'\n'
cout << "hello world" << '\n';
}
C++是没有格式输入输出的控制的 例如 %d,%f等等
int main()
{
int a = 0;
double d = 0;
cin >> a >> d;
cout << a<<' ';
cout << d<<endl;
return 0;
}
C++的缺省(默认)参数
可以把这个想象成备胎-----哈哈哈哈

如果传参了,就使用传参的值。
全缺省参数:
这个test1就是,意思就是全部缺省(默认)
void test1(int a = 10, int b = 20, int c = 30)
{}
int main()
{
test1();
return 0;
}
半缺省参数:这个就是部分缺省,但是要注意一下,只能从右向左缺省,不能间隔
void test2(int a, int b = 2, int c = 3)
{
cout << a << b << c << endl;
}
int main()
{
test2(1); //因为a不是缺省,所以至少传一个值
return 0;
}
函数的声明和定义不能同时缺省,即使缺省的参数值相同
下面仍旧会报错
//.h头文件中
void test4(int a = 10);
//.cpp源文件
void test4(int a =10 )
{
cout << a << endl;
}
声明缺省,定义不缺省是正确的,为什么呢?当头文件展开的时候,告诉了编译器这个函数可以缺省
//.h头文件中
void test4(int a = 10);
//.cpp源文件
void test4(int a )
{
cout << a << endl;
}
这个定义的缺省没有意义,因为调用的时候必须传值(全缺省)
//.h头文件中
void test4(int a );
//.cpp源文件
void test4(int a = 10)
{
cout << a << endl;
}
函数重载
什么是函数的重载?
C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的
形参列表(参数个数 或 类型 或 顺序)必须不同
正确的重载
int Add(int x, int y)
{
return x + y;
}
double Add(double x, double y)
{
return x + y;
}
int Add(int x, double d)
{
return 1;
}
int Add(double x, int d)
{
return 1;
}
错误的重载
int Add(int x, int y)
{
return x + y;
}
int Add(int y, int x)
{
return x + y;
}
short Add(short left, short right)
{
return left + right;
}
int Add(short left, short right)
{
return left + right;
}
如何快速理解重载?
很简单,只要输入的时候,因为类型,顺序,个数这些原因,当实参传递的时候
会调用一 一对应的函数就是重载
本文介绍了C++中的命名空间概念,用于解决全局作用域中的标识符冲突问题。详细阐述了命名空间的定义、使用方法,包括直接使用、using关键字引入和命名空间引用。接着讲解了C++的输入输出操作,如cout和cin的使用,并指出C++没有格式化输入输出。然后讨论了C++的默认参数功能,包括全缺省和半缺省参数,并强调了声明和定义的规则。最后,解释了函数重载的原理,展示了正确和错误的重载示例,强调重载依赖于形参列表的不同。
732





