C++基础学习_01ios
基础知识:1.命名空间,2.IO流(输入输入),3.参数缺省,4.函数重载
函数
1.命名空间学习
做用:对标识符的名称进行本地化,避免命名冲突spa
定义:namaspace space_name { 空间成员}3d
空间成员能够是定义变量,也能够是定义函数code
特色:可独自命名,可进行空间嵌套,可分段定义blog
注意:分段定义时,容许命名空间的名称相同,可是空间成员不能相同,由于编译器会将命名空间名称相同的合并到一块儿,空间成员若有相同则会产生重定义ci
使用:做用域限定符---" :: ''作用域
1>空间名称 做用域限定符 空间成员编译器
2>使用using 将命名空间的成员引入
using space_name :: space_number; ---将space_name空间中指定的空间成员展开到当前的做用域中
3>使用using namespace 空间名称 // 将空间名称引入
using namespace space_name; ---将space_name空间中全部的空间成员都展开到当前的做用域中<不推荐使用,容易产生命名冲突>
使用说明:使用using 会将命名空间中的空间成员展开到当前做用域
若当前做用域为全局域,则能够全局范围使用
若当前做用域为局部域,则只能在局部范围使用
// 单独使用 namespace a1{ int a = 10; int Add(int x, int y){ return x + y; } } // 分段使用 namespace a1{ int b = 10; int Sub(int x, int y){ return x - y; } } // 嵌套使用 namespace a2{ int a = 10; int Add(int x, int y){ return x + y; } namespace a3{ int c = 20; int Sub(int x, int y){ return x - y; } } } int main(){ // 命名空间的使用 a1::b; a1::Sub(10, 20); return 0; }
2.IO流(输入输出)
使用cout标准输出(控制台)与cin标准输入(键盘)时,必须包含头文件<iostream>和std标准命名空间;
头文件:#include<iostream>
输出流 cout
int a = 10;
int b = 20;
std::cout << "a = " << a << "\n";
std::cout << "b = " << b << "\n";
输入流 cin
char a; int b; double c;
std::cin >> a >> b >> c
能够分开流入,也能够直接流入
能够看出cout、cin都须要std::引用,因此它们属于std命名空间中的空间成员,能够在全局域中直接展开
eg usinf std::cout;
cout << "Hello world\n";
cin >>a >>b >> c;
3.缺省参数
定义:在定义或声明一个函数时,为形参设置一个默认值,若是没有进行传参,函数将会默认使用提早设置好的形参默认值
using std::endl; void func(int a = 10){ cout << a << endl; } int main(){ cout << "未传形参值\n"; func(); cout << "传形参值\n"; func(20); return 0; }
根据参数默认值是否彻底设置,能够分为:全缺省参数和半缺省参数
须要注意:
1.半缺省参数必须从右往左给出,不能间隔给出
2.缺省参数不能在函数声明和定义中同时出现
3.缺省参数值必须是常量或全局变量
using std::endl; // 全缺省参数 void func_1(int a = 10, int b = 20, int c = 30){ cout << "a = " << a << endl; cout << "b = " << b << endl; cout << "c = " << c << endl; } // 半缺省参数 void func_2(int a, int b = 20, int c = 30){ cout << "a = " << a << endl; cout << "b = " << b << endl; cout << "c = " << c << endl; }
4.函数重载
1-函数重载(搞很差就会函数重定义)
同名函数的形参列表必须不一样:参数类型不一样 或 参数个数不一样 或 参数顺序不一样
<1>void fun_1(int a);
<2>void fun_1(int a, int b);
<3>int fun_1(int a, int b);
<1><2>构成函数重载,<3>与<2>构成函数重定义
说明:函数修饰符不影响函数重载,也就是说函数重载只看形参列表的区别
2-函数名修饰规则 以Linux系统下显示结果进行说明
函数名修饰时,<从左往右>以参数类型的第一个字符开头进行修饰
3-extern "C" 通常用于C/C++混合编译时声明
告诉编译器,将该函数按照C语言编译规则进行编译
// 用于声明函数风格为C风格 extern "C" int Add(int x, int y){ printf("x + y = "); return x + y; } int main(){ Add(1, 2); return 0;
思考几个问题:
1.什么状况下两个函数才能造成函数重载?
函数名相同,而形参列表不一样。不一样之处在于:类型不一样 或 个数不一样 或 顺序不一样
2.C语言为何不支持函数重载?
C语言编译器底层对函数名称修饰过于简单,只是进行函数名下划线处理,不会造成函数重载,只会是重定义
3.C++中函数重载底层是怎么处理的?
利用函数的形参类型、个数、顺序的不一样,使用每一个形参的类型的首个字符进行组合造成“修饰符”
利用三者的不一样,能够组合成不一样的“修饰符”,来对函数名进行修饰,使之不会发生函数名冲突
4.C++中可否将一个函数按照C风格来编译?
能够,必须对函数进行 extern "C" 声明