C++基础学习_01
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的更多相关文章
- Java基础学习_01 概述及环境配置
一.概述 1.Java语言平台版本 1.1J2SE(Java 2 Platform Standard Edition)标准版 为开发普通桌面和商务应用程序提供的解决方案,该技术体系是其他两者的基础,可 ...
- Python基础学习_01字符串的拼接(字符串的格式化输出)
# 字符串的拼接 ---字符串的格式化输出 # 字符串的拼接 ---字符串的格式化输出 name = input("name:") age = input("age:&q ...
- Python基础学习_01修改代码所属作者
1.修改开头的作者Author 2.具体步骤如下图 (1)点击下图所画的按钮 (2)具体操作如图所示,就可以得到自己想要的结果了.
- salesforce 零基础学习(五十二)Trigger使用篇(二)
第十七篇的Trigger用法为通过Handler方式实现Trigger的封装,此种好处是一个Handler对应一个sObject,使本该在Trigger中写的代码分到Handler中,代码更加清晰. ...
- 如何从零基础学习VR
转载请声明转载地址:http://www.cnblogs.com/Rodolfo/,违者必究. 近期很多搞技术的朋友问我,如何步入VR的圈子?如何从零基础系统性的学习VR技术? 本人将于2017年1月 ...
- IOS基础学习-2: UIButton
IOS基础学习-2: UIButton UIButton是一个标准的UIControl控件,UIKit提供了一组控件:UISwitch开关.UIButton按钮.UISegmentedContro ...
- HTML5零基础学习Web前端需要知道哪些?
HTML零基础学习Web前端网页制作,首先是要掌握一些常用标签的使用和他们的各个属性,常用的标签我总结了一下有以下这些: html:页面的根元素. head:页面的头部标签,是所有头部元素的容器. b ...
- python入门到精通[三]:基础学习(2)
摘要:Python基础学习:列表.元组.字典.函数.序列化.正则.模块. 上一节学习了字符串.流程控制.文件及目录操作,这节介绍下列表.元组.字典.函数.序列化.正则.模块. 1.列表 python中 ...
- python入门到精通[二]:基础学习(1)
摘要:Python基础学习: 注释.字符串操作.用户交互.流程控制.导入模块.文件操作.目录操作. 上一节讲了分别在windows下和linux下的环境配置,这节以linux为例学习基本语法.代码部分 ...
随机推荐
- MMIO和PIO
1.概念 内存映射I/O(MMIO)[统一编址]和端口映射I/O(PMIO)[独立/单独编址]是两种互为补充的I/O方法,用于设备驱动程序和设备通信,即在CPU和外部设备之间. (1)在MMIO中,内 ...
- mysql8操作命令(持续更新)
mysql服务管理 查看服务状态 systemctl status mysqld.service 启动服务 systemctl start mysqld.service 关闭服务 systemctl ...
- Kafka启动报错 : ERROR Processor got uncaught exception
参照我之前的一篇博文Kafka学习之(二)Centos下安装Kafka安装了kafka并启动,状况并不像我之前最初的预期,报错了,并且我在当前Linux环境下安装的Java版本.Kafka版本都是和之 ...
- shell 环境变量的相关配置文件和配置方法
shell 环境变量的相关配置文件和配置方法: bash 的配置文件: 全局配置: /etc/profile, /etc/profile.d/*.sh, /etc/bashrc 个人配置 ~/.bas ...
- linux系统ansible一键完成三大服务器基础配置(剧本)
ansible自动化管理剧本方式一键完成三大服务器基础配置 环境准备:五台服务器:管理机m01:172.16.1.61,两台web服务器172.16.1.7,172.16.1.8,nfs存储服务器17 ...
- 还原真实,javascript之预编译 / 预解析
今天在群里吹水时,有群友提出一个问题.我一看很简单,就立马给出了答案:因为存在变量提升,所以输出undefined.本以为无人反驳,可确招来口诛笔伐.作为写实派的我,一贯以来坚持真实是我的使命,岂能容 ...
- 从0开始的Hexo主题制作
从0开始的Hexo主题制作 从零开始制作 Hexo 主题 H2O主题 先坑着
- mongodb 数据自动备份
创建Mongodb数据库备份目录 mkdir -p ~/backup/mongod_bak/mongod_bak_now mkdir -p ~/backup/mongod_bak/mongod_bak ...
- (js) 字符串和数组的常用方法
JS中字符串和数组的常用方法 JS中字符串和数组的常用方法 js中字符串常用方法 查找字符串 根据索引值查找字符串的值 根据字符值查找索引值 截取字符串的方法 字符串替换 字符串的遍历查找 字符串转化 ...
- Mac连接非22端口linux服务器
Mac连接非22端口linux服务器 原文链接:https://www.cnblogs.com/blog5277/p/9507080.html 原文作者:博客园--曲高终和寡 1:ssh连接 打开终端 ...