C++基础学习_01

基础知识:1.命名空间,2.IO流(输入输入),3.参数缺省,4.函数重载

1.命名空间

  作用:对标识符的名称进行本地化,避免命名冲突

  定义:namaspace space_name { 空间成员}

     空间成员可以是定义变量,也可以是定义函数

  特点:可独自命名,可进行空间嵌套,可分段定义

  注意:分段定义时,允许命名空间的名称相同,但是空间成员不能相同,因为编译器会将命名空间名称相同的合并到一起,空间成员如有相同则会产生重定义

  使用:作用域限定符---" :: ''

     1>空间名称 作用域限定符 空间成员

     2>使用using 将命名空间的成员引入

      using space_name :: space_number; ---将space_name空间中指定的空间成员展开到当前的作用域中

     3>使用using namespace 空间名称   // 将空间名称引入

      using namespace space_name; ---将space_name空间中所有的空间成员都展开到当前的作用域中<不推荐使用,容易产生命名冲突>

  使用说明:使用using 会将命名空间中的空间成员展开到当前作用域

       若当前作用域为全局域,则可以全局范围使用

       若当前作用域为局部域,则只能在局部范围使用

// 单独使用
namespace a1{
int a = ;
int Add(int x, int y){
return x + y;
}
}
// 分段使用
namespace a1{
int b = ;
int Sub(int x, int y){
return x - y;
}
}
// 嵌套使用
namespace a2{
int a = ;
int Add(int x, int y){
return x + y;
}
namespace a3{
int c = ;
int Sub(int x, int y){
return x - y;
}
}
}
int main(){
// 命名空间的使用
a1::b;
a1::Sub(, );
return ;
}

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 = ){
cout << a << endl;
} int main(){
cout << "未传形参值\n";
func();
cout << "传形参值\n";
func();
return ;
}

  根据参数默认值是否完全设置,可以分为:全缺省参数和半缺省参数

  需要注意:

    1.半缺省参数必须从右往左给出,不能间隔给出

    2.缺省参数不能在函数声明和定义中同时出现

    3.缺省参数值必须是常量或全局变量

using std::endl;

// 全缺省参数
void func_1(int a = , int b = , int c = ){
cout << "a = " << a << endl;
cout << "b = " << b << endl;
cout << "c = " << c << endl;
} // 半缺省参数
void func_2(int a, int b = , int c = ){
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(, );
return ;

思考几个问题:

  1.什么情况下两个函数才能形成函数重载?

    函数名相同,而形参列表不同。不同之处在于:类型不同 或 个数不同 或 顺序不同

  2.C语言为什么不支持函数重载?

    C语言编译器底层对函数名称修饰过于简单,只是进行函数名下划线处理,不会形成函数重载,只会是重定义

  3.C++中函数重载底层是怎么处理的?

    利用函数的形参类型、个数、顺序的不同,使用每个形参的类型的首个字符进行组合形成“修饰符”

    利用三者的不同,可以组合成不同的“修饰符”,来对函数名进行修饰,使之不会发生函数名冲突

  4.C++中能否将一个函数按照C风格来编译?

    可以,必须对函数进行 extern "C" 声明

C++基础学习_01的更多相关文章

  1. Java基础学习_01 概述及环境配置

    一.概述 1.Java语言平台版本 1.1J2SE(Java 2 Platform Standard Edition)标准版 为开发普通桌面和商务应用程序提供的解决方案,该技术体系是其他两者的基础,可 ...

  2. Python基础学习_01字符串的拼接(字符串的格式化输出)

    # 字符串的拼接 ---字符串的格式化输出 # 字符串的拼接 ---字符串的格式化输出 name = input("name:") age = input("age:&q ...

  3. Python基础学习_01修改代码所属作者

    1.修改开头的作者Author 2.具体步骤如下图 (1)点击下图所画的按钮 (2)具体操作如图所示,就可以得到自己想要的结果了.

  4. salesforce 零基础学习(五十二)Trigger使用篇(二)

    第十七篇的Trigger用法为通过Handler方式实现Trigger的封装,此种好处是一个Handler对应一个sObject,使本该在Trigger中写的代码分到Handler中,代码更加清晰. ...

  5. 如何从零基础学习VR

    转载请声明转载地址:http://www.cnblogs.com/Rodolfo/,违者必究. 近期很多搞技术的朋友问我,如何步入VR的圈子?如何从零基础系统性的学习VR技术? 本人将于2017年1月 ...

  6. IOS基础学习-2: UIButton

    IOS基础学习-2: UIButton   UIButton是一个标准的UIControl控件,UIKit提供了一组控件:UISwitch开关.UIButton按钮.UISegmentedContro ...

  7. HTML5零基础学习Web前端需要知道哪些?

    HTML零基础学习Web前端网页制作,首先是要掌握一些常用标签的使用和他们的各个属性,常用的标签我总结了一下有以下这些: html:页面的根元素. head:页面的头部标签,是所有头部元素的容器. b ...

  8. python入门到精通[三]:基础学习(2)

    摘要:Python基础学习:列表.元组.字典.函数.序列化.正则.模块. 上一节学习了字符串.流程控制.文件及目录操作,这节介绍下列表.元组.字典.函数.序列化.正则.模块. 1.列表 python中 ...

  9. python入门到精通[二]:基础学习(1)

    摘要:Python基础学习: 注释.字符串操作.用户交互.流程控制.导入模块.文件操作.目录操作. 上一节讲了分别在windows下和linux下的环境配置,这节以linux为例学习基本语法.代码部分 ...

随机推荐

  1. GO语言从入门到放弃目录

    GO语言基础 第一个GO程序 GO语言常量和变量 GO语言数据类型 GO语言流程控制 GO语言数组 GO语言切片 GO语言 map GO语言函数 GO语言指针 Go语言接口 GO语言常用包 GO语言的 ...

  2. 2019 Lonsdor K518S VS K518ISE

    2019 Lonsdor K518S VS K518ISE: The same: IMMO capabilities + Vehicle coverage. The difference: The u ...

  3. vue webpack 引入iview iview内部文件报语法错误

    错误如下: 是因为 es6 语法没有成功转化 因为 我的项目是别人做好的已经部署的项目 ,但是用到的是es2015  配置es2015并不起作用 是因为es2015已经过期了 安装的时候回有类似下面的 ...

  4. 怎么把Thu Nov 22 2018 10:49:36 GMT+0800转换成正常日期

    this.data //Thu Nov 22 2018 10:49:36 GMT+0800 this.date_of_birth = date.getFullYear() + '-' + (date. ...

  5. jquery判断点击事件是否指定区域

    $(document).click(function(e){  e = window.event || e; // 兼容IE7 obj = $(e.srcElement || e.target);   ...

  6. selenium + python + nwjs

    1.下载chromedriver文件 http://chromedriver.storage.googleapis.com/index.html google官方下载地址 http://dl.nwjs ...

  7. spring boot使用mongodb时,xxxRepository不能Autowired的问题

    默认情况下,当继承MongoRepository的CRUD在@SpringBootApplication的子包下时,xxxRepository是能够自动被扫描和创建代理的.但是如果不在默认路径下,就无 ...

  8. 【题解】Luogu P4396 [AHOI2013]作业

    原题传送门 最快的解法好像是cdq,但窝只会莫队+线段树/树状数组的做法 题目要我们求1.在区间[l,r]中值域在[a,b]中有多少个数2.在区间[l,r]中值域在[a,b]中有多少个不同数 一眼就看 ...

  9. Gradle构建多模块项目

    通常我在使用Maven构建项目的时候是将应用项目划分为多个更小的模块. Gradle 项目也拥有多于一个组件,我们也将其称之为多项目构建(multi-project build). 我们首先创建一个多 ...

  10. layui 单选项 点击显示与隐藏

    同一个页面有多个单选按钮:https://blog.csdn.net/haibo0668/article/details/86220767