#include
#include
int rand = 0;
int main()
{
printf("%d", rand);
return 0;
}
结论:与头文件stdlib.h的rand函数的命名冲突了
问题:不改变此变量的名字的前提下,如何正确打印此变量?
答案: 使用命名空间将变量进行封装
注意:命名空间的名字也会发生命名冲突,因此不要起rand!
#include
#include
namespace shunhua
{
int rand = 0;
}
int main()
{
printf("%d", rand);
return 0;
}
这里其实识别的是rand函数,不是命名空间里的变量!
#include
#include
namespace shunhua
{
int rand = 0;
}
using namespace shunhua;
int main()
{
printf("%d", rand);
return 0;
}
学过C语言,想必都能看懂这一段代码。
#include
int rand = 1;
int main()
{
int rand = 0;
printf("%d\n", rand);
return 0;
}
作用域限定符:
: :前面要不加默认使用全局变量,前面加命名空间使用的是命名空间的变量
#include
namespace shun_hua
{
int rand = 3;
}
int rand = 1;
int main()
{
int rand = 0;
printf("%d\n", rand);//局部变量中查找
printf("%d\n",::rand);//全局域里面查找
printf("%d\n",shun_hua::rand);//在命名空间里面查找
return 0;
}
#include
#include
namespace shunhua
{
int rand = 0;
}
int main()
{
printf("%d", shunhua::rand);
return 0;
}
#include
#include
namespace shun_hua
{
int rand = 0;
int y = 1;
}
namespace shun_hua
{
int x = 2;
int z = 3;
}
int main()
{
printf("%d\n", shun_hua::rand);
printf("%d\n", shun_hua::x);
printf("%d\n", shun_hua::y);
printf("%d\n", shun_hua::z);
return 0;
}
#include
namespace shun_hua
{
int x = 0;
namespace shun_hua
{
int x = 1;
}
}
//using namespace shun_hua;
int main()
{
printf("%d\n", shun_hua::shun_hua::x);
return 0;
}
拓展: 早期的头文件在全局域中实现,因此头文件含.h, 后来为了与C头文件区分以及正确的使用命名空间,声明C++的头文件不带.h,因此我们现在看到的iostream不带头文件,而在早期的VC6.0版本还可以使用iostream.h的版本。
<<跟C语言的左移操作符意义不同,这里是流插入运算符,将数据流入输出流。
打印hello world
#include //包含头文件
using namespace std;//使用命名空间,这两者缺一不可
int main()
{
cout << "hello world\n";
return 0;
}
我们一般看到的写法是这样的
#include //包含头文件
using namespace std;//使用命名空间,这两者缺一不可
int main()
{
cout << "hello world"<<endl;//这里的endl其实就是"\n"
return 0;
}
#include //包含头文件
using std::cout;
using std::endl;
//这其实是我们使用命名空间的符号的声明
int main()
{
cout << "hello world"<<endl;
std::cout<<"hello world"<<std::endl;
//在使用时也可以这样写,不过在重复多次写这里语句时,比较麻烦。
return 0;
}
输入一个整形,并将这个整形打印
#include
using std::cin;
using std::cout;
using std::endl;
int main()
{
int x = 0;
cin >> x;//这是将输入流的数据读取出来放进x
cout << x << endl;
return 0;
}
#include
using std::cout;
using std::endl;
int add(int x = 0 ,int y = 0)
{
return x + y;
}
int main()
{
cout << add() << endl;
cout << add(1,2) << endl;
cout << add(1) << endl;
//cout<
//语法规定不行
return 0;
}
#include
using std::cout;
using std::endl;
int add(int x, int y = 0)
{
return x + y;
}
int main()
{
cout << add(1) << endl;
cout << add(1, 2) << endl;
return 0;
}
int add(int x = 0,int y = 0);
add.cpp文件
#include"add.h"
int add(int x, int y)
{
return x + y;
}
test.cpp文件
#include"add.h"
#include
using std::cout;
using std::endl;
int main()
{
cout<<add(1)<<endl;
cout << add(1,2) << endl;
return 0;
}
#include
using std::cout;
using std::endl;
#define MAX 100//常量
int x = 0;//全局变量
int add(int max = MAX, int min = x)
{
return max+min;
}
int main()
{
cout << add() << endl;
return 0;
}
重载,顾名思义就是一词多义,比如比如:以前有一个笑话,国有两个体育项目大家根本不用看,也不用担心。一个是乒乓球,一个是男足。前者是“谁也赢不了(乒乓)!”,后者是“(国足)谁也赢不了!”。
函数重载就是函数同名不同义。
函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 顺序)必须不同常用来处理实现功能类似数据类型不同的问题
#include
using std::cout;
using std::endl;
int add()
{
return 0;
}
int add(int x)
{
return x;
}
int main()
{
cout << add() << endl;
cout << add(1) << endl;
}
#include
using std::cout;
using std::endl;
int add(int x ,int y)
{
return 0;
}
int add(double x,double y)
{
return 0;
}
int main()
{
cout << add(1,1) << endl;
cout << add(1.0,1.0) << endl;
}
#include
using std::cout;
using std::endl;
int add(int x ,double y)
{
return 0;
}
int add(double y,int x)
{
return 0;
}
int main()
{
cout << add(1,1.0) << endl;
cout << add(1.0,1) << endl;
}
示例:
#include
using std::cout;
using std::endl;
int add(int x ,int y)
{
return 0;
}
float add(int x,int y)
{
return 0;
}
int main()
{
cout << add(1,0) << endl;
cout << add(1,1) << endl;
}
#include
using std::cout;
using std::endl;
int add(int x ,int y)
{
return 0;
}
int add(int y,int x)
{
return 0;
}
示例:
#include
using std::cout;
using std::endl;
int add(int x ,int y = 0)
{
return 0;
}
float add(int x,int y)
{
return 0;
}