目录
一、命名空间
1.1 什么是命名空间
1.2 命名空间的定义
1.3 命名空间的使用
二、输入输出流
三、缺省参数
四、函数重载
五、内联函数
C++是一种通用的编程语言,具有面向对象、泛型编程和低级内存操作等特性。它是由Bjarne Stroustrup在20世纪80年代初开发的,旨在扩展C语言的功能,使其更适合大型系统和复杂项目的开发。C++兼容C语言语法,本文介绍C++独有的语法。
一、命名空间
1.1 什么是命名空间
在C/C++中,变量、函数⼤量存在,这些变量、函数的名称将都存在于全局作⽤域中,可能会导致很多冲突。使⽤命名空间的⽬的是对标识符的名称进⾏本地化,以避免命名冲突。
1.2 命名空间的定义
namespace 空间名
{
}
//注意末尾没有分号
说明
- 命名空间中可以定义变量/函数/类型
- 命名空间支持嵌套定义
- namespace只能定义在全局
- 多个文件定义的同名namespace编译器自动合并,不会发生冲突
- C++标准库都放在⼀个叫std(standard)的命名空间中。
1.3 命名空间的使用
编译器查找⼀个变量的声明或者定义时,默认只会在局部或者全局查找,不会到命名空间⾥⾯去查找。要使⽤命名空间中定义的变量/函数,有以下三种⽅式:
- 指定命名空间访问——作用域限定符::
namespace paradiso { int a = 1; int b = 2; } int main() { printf("%d\n", paradiso::a); return 0; }
- using将命名空间中的成员展开——using+空间名+限定符+域中变量
namespace paradiso { int a = 1; int b = 2; } using paradiso::b; int main() { printf("%d\n", b); return 0; }
- 展开命名空间的全部成员——using+namespace+空间名
namespace paradiso { int a = 1; int b = 2; } using namespace paradiso; int main() { printf("%d\n", b); printf("%d\n", a); return 0; }
二、输入输出流
- <iostream> 是 Input Output Stream 的缩写,是标准的输⼊、输出流库。注意没有.h
- <<是流插⼊运算符,>>是流提取运算符。
- cout/cin/endl等都属于C++标准库,C++标准库都放在⼀个叫std(standard)的命名空间中,要通过命名空间的使⽤⽅式去⽤他们。
- 比起C语言的优势:自动识别变量类型
#include<iostream>
using namespace std;
int main()
{
int a = 0;
double b = 0;
char c = 0;
float d = 0;
cin >> a >> b >> c >> d;
cout << a << " " << b << " " << c << " " << d << " " << endl;
return 0;
}
三、缺省参数
缺省参数是声明或定义函数时为函数的参数指定⼀个缺省值。在调用该函数时,如果没有指定实参
则采用该形参的缺省值,否则使⽤指定的实参,缺省参数分为全缺省和半缺省参数。#include<iostream> using namespace std; void Func(int a = 0) { cout << a << endl; } int main() { Func(); Func(2); return 0; }
全缺省就是全部形参给缺省值,半缺省就是部分形参给缺省值。C++规定半缺省参数必须从右往左依次连续缺省,不能间隔跳跃给缺省值。
带缺省参数的函数调⽤,C++规定必须从左到右依次给实参,不能跳跃给实参。
#include<iostream> using namespace std; //全缺省 void Test1(int a = 1, int b = 2, int c = 3) { cout << "a = " << a << endl; cout << "b = " << b << endl; cout << "c = " << c << endl; } //半缺省 void Test2(int a, int b = 2, int c = 3) { cout << "a = " << a << endl; cout << "b = " << b << endl; cout << "c = " << c << endl; } int main() { Test1(); cout << endl; Test1(10); cout << endl; Test1(10, 20); cout << endl; Test1(10, 20, 30); cout << endl; Test2(100); cout << endl; Test2(100, 200); cout << endl; Test2(100, 200, 300); return 0; }
四、函数重载
由于C语⾔不⽀持同⼀作⽤域中出现同名函数,比如在写一个加法函数时,不同类型的加法需要写多个不同名的函数。C++通过函数重载来解决这个问题
函数重载的两同三不同
相同:
- 函数名相同
- 作用域相同
不同:
- 参数类型不同
int Add(int left, int right) { return left + right; } double Add(double left, double right) { return left + right; }
- 参数个数不同
void f() { cout << "f()" << endl; } void f(int a) { cout << "f(int a)" << endl; }
- 不同参数类型的顺序不同
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; }
五、内联函数
内联函数解决的是C语言中宏函数易错难写的问题。⽤inline修饰的函数叫做内联函数,编译时C++编译器会在调⽤的地⽅展开内联函数。
#include<iostream>
using namespace std;
inline int Add(int x, int y)
{
int ret = x + y;
return ret;
}
int main()
{
int ret = Add(1, 2);
cout << Add(1, 2) * 5 << endl;
return 0;
}