C++是C语言的继承,在C++语法中,C语言的语法基本都适用,但是有小部分的语法略有改动。
#include<iostream>
using namespace std;
int main() {
cout << "adventure time" << endl;
system("pause");
return 0;
}
这是一段简单的C++程序,输出结果是在控制台输出adventure time。
※namespace 命名空间
#include<iostream>
namespace My1 {
int a = 1;
namespace My2 {
int a = 2;
}
}
namespace My3 {
int a = 3;
}
int main() {
int a;
std::cout << "adventure time" << std::endl;
system("pause");
return 0;
}
通过namespace,可以看出,我们可以在不同名称的命名空间中定义同名的变量a,那么此时如果要输出其中一个a,应该怎么办呢?
我们可以看到,在main函数中
std::cout << "adventure time" << std::endl;
利用::可以输出该命名空间内的变量等,例如cout和endl关键字就是在std中包含的,所以如果不加入
using namespace std;
这句话,就要每次使用之前都std::xxxx,非常不方便。在以后可以合理利用这句代码,实现简单易行的操作。
总结:
命名空间是用来进行名字隔离的,它所占的区域叫做命名空间域。
访问域中 My1::a;
修改域中变量 My1::=100;
访问全局 (空格)::a
※输入输出对象
cout 标准输出流对象,<<输出操作符
cin 标准输入流对象,>>输入操作符
int main() {
int i = 10;
cout << i;
cin >> i;
return 0;
}
※函数重载
C++允许在同一范围中声明几个功能类似的同名函数,但是对这些同名函数有以下要求:
要求:1.参数不同 2.类型不同
即:函数重载后所完成的功能或者运算要不同。例如下面这段C++代码:
int add(int a, int b) { //两个整型相加
return a + b;
}
int add(int a, int b, int c) { //三个整型相加
return a + b + c;
}
float add(float a, float b) { //两个浮点数相加
return a + b;
}
这就是add函数的重载,在c++编译环境下可以正常运行,但是如果将文件后缀改为.c,就不能正常的运行,会报错。
△为什么在C++环境内可以函数重载,在C中就不行?
首先我们要讨论一下编译的过程:
1.预处理 :头文件展开/去注释/宏替换/条件编译;(生成.i文件)
2.编译过程:检查语法,将高级语言转为汇编语言; (生成.s文件)
3.汇编过程:汇编语言转为机器语言(二进制代码);(生成.o文件)
4.链接部分:将所引用的头文件等进行链接。(生成.exe文件)
#include<iostream>
using namespace std;
int add(int a, int b) {
return a + b;
}
int add(int a, int b, int c) {
return a + b + c;
}
float add(float a, float b) {
return a + b;
}
int main() {
cout << add(1, 2) << endl;
cout << add(1, 2, 3) << endl;
cout << add(1.1f, 2.2f) << endl;
system("pause");
return 0;
}
输入结果为:
这样是可以运行成功的,因为虽然三个函数的名称在表面上看起来是相同的,但其实在编译以后,这三个函数的名称是不一样的,所以在链接的时候编译器可以找到对应得函数,而在c语言中,如果你的函数名称是相同的,编译以后所获得的函数名也是完全相同的,链接的时候编译器无法找到对应得函数,会产生混乱。
总结来说:
因为在c++中函数命名修饰规则使得重载后可以找到相同函数名的函数所在的地址,所以c++支持重载,而C语言不支持。
※缺省参数
所谓缺省参数,顾名思义,就是在声明函数的某个参数的时候为之指定一个默认值,在调用该函数的时候如果采用该默认值,你就无须指定该参数。
缺省参数使用主要规则:
调用时你只能从最后一个参数开始进行省略,换句话说,如果你要省略一个参数,你必须省略它后面所有的参数,即:带缺省值的参数必须放在参数表的最后面。
缺省值必须是常量。
显然,这限制了缺省参数的数据类型,例如动态数组和界面类型的缺省参数值只能是 nil;至于记录类型,则根本不能用作缺省参数。 缺省参数必须通过值参或常参传递。声明是带有缺省参数的函数,则缺省值只能写在声明当中。-摘自百度百科。
int add(int a, int b = 2) {
return a + b;
}
int add(int a = 1, int b = 2) {
return a + b;
}
例如,以上两个函数,第一个为半缺省,第二个为全缺省的情况。
注意:半缺省时只能缺省右边的参数,第一个参数不能缺省,而且必须连续,不能隔一个缺省一个。