1.1命名空间
namespace 可以自定义命名空间,详见命名空间
(1)以“命名空间::元素” 的方式指定命名空间中定义的元素
#include<iostream>
int main() {
std::cout << "C++" << std::endl;
return 0;
}
(2)使用using语句引用命名空间
#include<iostream>
int main() {
using std::cout;
using std::endl;
cout << "C++" << endl;
return 0;
}
(3)使用using namespace std; 这样引入std空间后,std中定义元素就都可以用了
#include<iostream>
using namespace std;
int main() {
cout<<"C++"<<endl;
return 0;
}
但这种情况引用多个命名空间就会出错,例如标准库中含有swap()函数,若再自定义一个swap()函数,函数就会出现二义性错误
#include<iostream>
using namespace std;
void swap(int& x, int& y);
void swap(int& x, int& y) {
x = y - x ;
y = x - y ;
cout << "你使用了自定义的函数" << endl;
}
int main() {
int a = 3, b = 4;
swap(a, b);
cout << "a = " << a << " ," << "b = " << b << endl;
return 0;
}
//你使用了自定义的函数
//a = 1 ,b = -3
可见某个库函数名与你的函数名撞名了,会优先使用自定义的函数
int a = 3, b = 4;
swap(a, b);
cout << "a = " << a << " ," << "b = " << b << endl;
//输出结果为“你使用了自定义的函数你使用了自定义的函数
//a = 4 ,b = 3”
1.2 与C的区别
<1>常变量无法通过指针修改:
const int a = 10;
int *p = &a ;
*p = 20;(错)
<2>新增bool类型
bool a = false;
bool b = true;
bool greater(int x,int y){ return a>b;}
1.3 默认参数
#include<iostream>
using namespace std;
void add(int x , int y = 4, int z = 5) {
cout << x + y + z << endl;
}
int main() {
add(1); //1+4+5=10
add(1, 2); //1+2+5 = 8
return 0;
}
由此可见,实参与形参同时存在时优先使用实参,若缺少实参则用形参做替补。
1.4 函数重载
函数重载:在同一个作用域内,函数名相同,但参数个数或参数类型不同。
(注意: 在形参数据类型为double或float时,实参必须带小数,整数要带“.0”,否则编译器会识别失败)
#include<iostream>
using namespace std;
void add(int x , int y ) {
cout << "int: "<<x + y << endl;
}
void add(double x, double y) {
cout << "double: " << x + y << endl;
}
int main() {
add(1,2); //3
add(1.5, 3.0); //4.5
return 0;
}
1.5 引用
&后面的数是等号后面数的小名
int a = 10;
int& b = a;
b += 6;
cout<<"a = "<<a<<endl;
//a = 16
(1)引用时必须要初始化,变量类型要一致
(2)不能绑定常值,例如 int &a =10;所以如果想使用常量值初始化引用,则必须引用const引用,也叫const修饰
const int& a = 10;
此处引用了b,同时b的值是无法再更改的
(3)引用绑定后,不能再做其他值的引用;否则提示错误:多次初始化