前言:
最近开始学习C++了,所以新开一个板块来记录,因为知道革命一路上荆棘丛生,所以取名为取经之路。
namespace(命名空间):
首先我们要知道::是域作用符号默认访问全局变量。
所谓命名空间,我称之为保护自己的财产,这只是一种形象的比喻。
举个例子:张三今天赚了500块,老板发的现金,然后他将钱存入了银行卡。只有得到这张银行卡才能使用里的钱。而在代码中命名空间就相当于这张银行卡,只有有了这个命名空间才能使用里面的变量,含数等等。
我们看个代码
#include<iostream>
using std::cout;
using std::endl;namespace people1 { //创建一个命名空间int age = 20;char name[] = { "张三" };
}int main()
{ //我们使用一个命名空间格式是:"空间名"::"要用的数据"cout << "姓名:" << people1::name << '\n' << "年龄" << people1::age << std::endl;return 0;
}
运行代码:
如果我们不想写前面的空间,名我们可以这样做
#include<iostream>
using std::cout;
using std::endl;namespace people1 {int age = 20;char name[] = { "张三" };
}using namespace people1;声明命名空间int main()
{cout << "姓名:" << name << '\n' << "年龄" << age << std::endl;return 0;
}
这样就是将空间展开全部的变量都可以用了,类似于全局变量。
但是我们来看这个例子
如果我们这样做的化就会使得b不确定。
所以我们一般不这么做
我们一般会采用1.部分展开。2.就干脆不展开每次都用域作用符来声明。
这是部分展开的格式。
命名空间可以嵌套使用如:
namespace N1
{int a;int b;int Add(int left, int right){return left + right;}namespace N2{int c;int d;int Sub(int left, int right){return left - right;}}
}
相同的命名空间
最后: 同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。
ps:一个工程中的test.h和上面test.cpp中两个N1会被合并成一个
cout cin输入输出
1. 使用cout标准输出对象(控制台)和cin标准输入对象(键盘)时,必须包含< iostream >头文件
以及按命名空间使用方法使用std。
2. cout和cin是全局的流对象,endl是特殊的C++符号,表示换行输出,他们都包含在包含<
iostream >头文件中。
3. <<是流插入运算符,>>是流提取运算符。
这相当于C语言的输入输出,我个人认为c++的输出不如C语言,在控制小数精度上就非常麻烦。但输入确实爽了不少,毕竟还不弹出vs特有的scanf报错。
std命名空间的使用惯例:
std是C++标准库的命名空间,如何展开std使用更合理呢?
1. 在日常练习中,建议直接using namespace std即可,这样就很方便。
2. using namespace std展开,标准库就全部暴露出来了,如果我们定义跟库重名的类型/对
象/函数,就存在冲突问题。该问题在日常练习中很少出现,但是项目开发中代码较多、规模
大,就很容易出现。所以建议在项目开发中使用,像std::cout这样使用时指定命名空间 +
using std::cout展开常用的库对象/类型等方式。
我在这举个例子就行了,剩下自己研究。
缺省参数:
这是C语言没有的
缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实
参则采用该形参的缺省值,否则使用指定的实参。
举个例子就是这样:
void Func(int a = 10, int b = 20, int c = 30)
{cout<<"a = "<<a<<endl;cout<<"b = "<<b<<endl;cout<<"c = "<<c<<endl;
}
简单来说就是,在创建的时候添加一个参数,没有传入参数就自动用添加的。
缺省类型:
全缺省
void Func(int a = 10, int b = 20, int c = 30)
{cout<<"a = "<<a<<endl;cout<<"b = "<<b<<endl;cout<<"c = "<<c<<endl;
}
半缺省
void Func(int a , int b = 20, int c = 30)//注意a没赋值
{cout<<"a = "<<a<<endl;cout<<"b = "<<b<<endl;cout<<"c = "<<c<<endl;
}
1. 半缺省参数必须从右往左依次来给出,不能间隔着给
2. 缺省参数不能在函数声明和定义中同时出现
3. 缺省值必须是常量或者全局变量
4. C语言不支持(编译器不支持)