目录
一. 关键字
二. 命名空间
三. 输入&输出
1.输出
2.输入
四. 缺省参数
1.全缺省参数
2.半缺省参数
五. 函数重载
1.类型
2.原理
一. 关键字
简单了解一下都有哪些关键字
二. 命名空间
在c语言的学习之中,我们知道,在同一个作用域中,我们无法使用相同的名字进行命名。也无法使用库中的名字进行命名。
而在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存
在于全局作用域中,很有可能会导致冲突。而我们可以使用命名空间来解决这个问题,使用命名空间的目的是对标识符的名称进行本地化,
以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。
namespace szt
{
}
例如,我们可以定义一个名为szt的命名空间
而命名空间中可以定义变量/函数/类型
namespace szt
{
int rand=10;//变量
int add(int a,int b)//函数
{
return a+b;
}
struct sList//类型
{
int cal;
struct sList* next;
}
}
同时,命名空间可以嵌套使用
namespace szt1
{
int rand=10;
namespace szt2
{
}
}
而在同一个工程之下,同名的命名空间会被合并。例如头文件和源文件中的同名命名空间。
而若是想要使用命名空间的成员,有3种方法
1.前面加命名空间名称以及作用域限定符
namespace szt
{
int a=10;//变量
int add(int a,int b)//函数
{
return a+b;
}
struct sList//类型
{
int cal;
struct sList* next;
};
}
int main()
{
struct szt::sList SL;
printf("%d\n",szt::a);
}
2.使用using引入某个成员
using szt::a;
int main()
{
printf("%d\n",a);
}
3.使用using namespace 命名空间名称 引入
using namespace szt;
int main()
{
printf("%d",a);
}
而第一种方法能够做到最好的隔离,但使用较为麻烦
第二种方法也能做到较好的隔离,在使用一些常用的成员时较为方便
第三种方法最方便,但会导致隔离失效,引发一些问题
例如在我们常见的一些代码中,在引用输入输出流的头文件后
#include<iostream>
往往会使用第三种方法来展开一个std命名空间(C++库的实现定义)
using namespace std;
这种方法,在我们自己练习时会很方便,但若是在公司中进行大的项目的实现时,不要这样使用。
三. 输入&输出
1.输出
我们可以先实现一下我们的老朋友Hello world
#include<iostream>
using namespace std;
int main()
{
cout<<"Hello world!!!"<<endl;
return 0;
}
在其中,iostream 和std 我们在上面已经提到过,这里补充一点,早期我们直接引用头文件即可
#include<iostream.h>
而后来,为了与c语言进行区别,我们便如上述代码样式进行头文件的引用。
cout用于输出,<<为流插入运算符,endl表示换行输出
因此,我们也可以这样
cout<<"Hello world!!!\n";
而当输出存在参数时,cout能做到自动识别变量类型,并识别浮点数的小数位
#include<iostream>
using namespace std;
int main()
{
float a=1.23;
char b='b';
cout<<a<<" "<<b<<endl;
return 0;
}
2.输入
在C++中,我们使用cin进行输入,同样,cin也能自动识别变量类型
int main()
{
int a;
double b;
char c;
cin>>a;
cin>>b>>c;
return 0;
}
而>>是流提取运算符
四. 缺省参数
缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实
参则采用该形参的缺省值,否则使用指定的实参。
而缺省参数分为全缺省参数,半缺省参数
1.全缺省参数
字面意思,便是所有参数都有缺省值
void print(int a = 10, int b = 20, int c = 30)
{
cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl;
cout<<"c = "<<c<<endl;
cout<<end1;
}
int main()
{
print();
print(1);
print(1,2);
print(1,2,3);
return 0;
}
而在存在部分的参数时,严格遵循从左向右的原则
无法做到c存在参数而a,b没有参数的类似的情况
print(1, ,3);//error
2.半缺省参数
其实就是部分缺省
而在半缺省参数中,我们必须严格遵循从右往左依次给出
void print(int a, int b, int c = 30)//right
{
cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl;
cout<<"c = "<<c<<endl;
cout<<end1;
}
void print(int a = 10, int b, int c = 30)//error
{
cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl;
cout<<"c = "<<c<<endl;
cout<<end1;
}
注意:缺省值必须是常量或者全局变量
缺省参数不能在函数声明和定义中同时出现,而别人在查看代码功能时,往往会去首先查看头文件来了解各个函数的功能,所以我们一般将缺省参数放在函数的声明之中,也就是头文件中。
五. 函数重载
函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这
些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同,常用来处理实现功能类似数据类型
不同的问题。
1.类型
参数类型不同
int Add(int left, int right)
{
cout << "int Add(int left, int right)" << endl;
return left + right;
}
double Add(double left, double right)
{
cout << "double Add(double left, double right)" << endl;
return left + right;
}
int main()
{
cout<<Add(1, 2)<<endl;
cout << Add(1.1,2.2) << endl;
return 0;
}
参数个数不同
int Add(int num1, int num2, int num3)
{
cout << "int Add(int num1, int num2, int num3)" << endl;
return num1+num2+num3;
}
int Add(int num1, int num2)
{
cout << "int Add(int num1, int num2)" << endl;
return num1+num2;
}
int main()
{
cout<<Add(1, 2)<<endl;
cout << Add(1,2,3) << endl;
return 0;
}
参数类型顺序不同
void f(int a, char b)
{
cout << "f(int a,char b)" << endl;
}
void f(char b, int a)
{
cout << "f(char b, int a)" << endl;
}
int main()
{
f(1, 'a');
f('a', 1);
return 0;
}
而单纯的返回值不同无法作为函数重载的条件。
2.原理
不会,之后再补充