c++的重载 缺省参数和命名空间详解
参加了几次笔试,发现有很多c++方面的问题被卡了。从现在开始进攻c++。之后会陆续更新c++学习笔记。
先说说我学习的书籍,大家如果有好的书籍推荐,感谢留言。
暂时是在看这些书自学。
1.C++介绍。
C几乎是C++的一个子集,所以C语言支持的语法在C++基本都支持并需要使用。C plus plus(C++),所以在C的基础上又有了很多新的特性。
2.为什么C++支持重载?C语言不支持--重点
先说说什么是重载:C++ 允许多个函数拥有相同的名字,只要它们的参数列表不同就可以,这就是函数的重载(Function Overloading)。借助重载,一个函数名可以有多种用途。
举个例子:
void Func( )
{
int x = 0, y = 0;
x = x + y;
}
void Func(int x, int y)
{
int sum = x + y;
}
int main( )
{
Func( );
Func(4,5);
return 0;
}
这就是函数重载。重载支持函数的参数列表不同。参数列表是指参数的类型和参数的个数。
参数的类型有点不好理解。举个例子。
func(int x,int y);
func(int x,char y);
func(char x,int y);
上面三个函数相互构成重载。所以参数类型指的是两个函数的得参数对应位置的类型。
再来说说为什么C语言不支持重载,而c++支持
这个不许深入到底层去探个究竟,这里我们要看底层汇编代码(我们在linux平台下查看汇编代码,分别采用gcc和g++编译)gcc一遍自带,g++需要自己安装,安装只需输入:
yum install gcc gcc-c++
下面是执行过程:
从图中可以看出,C语言和c++在底层的函数解析规则不同,导致C语言不支持从重载。
3.缺省参数
定义:就是在声明函数的某个参数的时候为之指定一个默认值,在调用该函数的时候如果采用该默认值,你就无须指定该参数。
看个栗子:
int Add1(int a, int b)
{
return a + b;
}
int Add2(int a, int b = 1)
{
return a + b;
}
int main( )
{
printf("%d\n",Add1(1, 2));
printf("%d\n", Add2(1));
printf("%d\n", Add2(1,2));
system("pause");
return 0;
}
看看结果
函数在定义时给了默认值,调用时如果传了参数就用实参,如果没传就用默认值。这个作用在后面学习类的构造函数很有用。
当然缺省参数也有一定的规则:调用时你只能从最后一个参数开始进行省略,换句话说,如果你要省略一个参数,你必须省略它后面所有的参数,即:带缺省值的参数必须放在参数表的最后面。 缺省值必须是常量。显然,这限制了缺省参数的数据类型,例如动态数组和界面类型的缺省参数值只能是 nil;至于记录类型,则根本不能用作缺省参数。 缺省参数必须通过值参或常参传递。
4.命名空间
以关键字namespace开始,其后接命名空间的名字:
namespace myname1
{
int a = 1;
}
namespace myname2
{
int a = 5;
}
命名空间的名字在其所在作用域中是唯一的,命名控件可以在全局作用域或者其它作用域内部定义,但是不能在函数或者类的内部定义。
▶每个命名空间都是一个作用域:
这就不会出现C语言中的命名冲突问题。像上面的代码有两个变量a,但是不会出现命名冲突。
▶从命名空间外部使用命名空间成员:
myname1::a;
当我们使用该变量时要加上作用域限定符。
▶命名空间可以嵌套定义:
namespace myname2
{
int a = 5;
namespace myname3
{
int a = 10;
}
}
这样是可以的。
以上运行结果:
注意:命名空间作用域不能以分号结束。
专栏链接:https://blog.csdn.net/column/mycolumn.html
c++的重载 缺省参数和命名空间详解的更多相关文章
- 不可或缺 Windows Native (16) - C++: 函数重载, 缺省参数, 内联函数, 函数模板
[源码下载] 不可或缺 Windows Native (16) - C++: 函数重载, 缺省参数, 内联函数, 函数模板 作者:webabcd 介绍不可或缺 Windows Native 之 C++ ...
- linux dd命令参数及用法详解---用指定大小的块拷贝一个文件(也可整盘备份)
linux dd命令参数及用法详解---用指定大小的块拷贝一个文件 日期:2010-06-14 点击:3830 来源: 未知 分享至: linux dd命令使用详解 dd 的主要 ...
- linux管道命令grep命令参数及用法详解---附使用案例|grep
功能说明:查找文件里符合条件的字符串. 语 法:grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>] ...
- linux mount命令参数及用法详解
linux mount命令参数及用法详解 非原创,主要来自 http://www.360doc.com/content/13/0608/14/12600778_291501907.shtml. htt ...
- 【转】linux expr命令参数及用法详解
在抓包过程中,查看某个设定时间内,数据上下行多少,用命令expr 计算! --------------------------------------------------------------- ...
- linux useradd(adduser)命令参数及用法详解(linux创建新用户命令)
linux useradd(adduser)命令参数及用法详解(linux创建新用户命令) useradd可用来建立用户帐号.帐号建好之后,再用passwd设定帐号的密码.而可用userdel删除帐号 ...
- linux dmesg命令参数及用法详解(linux显示开机信息命令)
linux dmesg命令参数及用法详解(linux显示开机信息命令) http://blog.csdn.net/zhongyhc/article/details/8909905 功能说明:显示开机信 ...
- linux sed命令参数及用法详解
linux sed命令参数及用法详解 http://blog.csdn.net/namecyf/article/details/7336308 1. Sed简介 sed 是一种在线编辑器,它一次处理一 ...
- 使用openURL实现程序间带参数跳转详解
使用openURL实现程序间带参数跳转详解 实现的效果:有两款应用A与B,A打开B A --> B 1. 新建工程B,bundle ID为com.YouXianMing.B 建立一个URL 这么 ...
随机推荐
- JavaScript动画
早期的JS动画 早期的JS循环动画主要是通过setInterval/setTimeout实现的 function jump() { console.log("我跳了一下"); } ...
- Java 输入输出流总结
1. 运用BufferedInputStream 读取文件流和BufferedOutputStream写文件流: protected static void writeFile2(String inp ...
- 理解JVM——类加载机制
我们在编写Java程序之后,会通过编译器得到一个class文件,这个class文件是如何与JVM进行配合的呢?类中的信息是如何变成JVM可以使用的Java类型呢?这些都是类加载机制做到的. 虚拟机把描 ...
- 20155314 2016-2017-2 《Java程序设计》实验三 敏捷开发与XP实践
20155314 2016-2017-2 <Java程序设计>实验三 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 实验知识点总结 (一)敏捷开发与XP 软件工程:把系统 ...
- 将Tensor输出到文件
) local file = io.open('/home/xbwang/Desktop/part2original','a') ,length do number = part2[j] file:w ...
- POJ3268(Dijkstra_邻接矩阵)
https://vjudge.net/problem/POJ-3268 题目大意: n个农场的n头奶牛将前往x农场,要选择一条来回时间最短的路径. (一头牛的返回路线可能不同于她最初去派对的路线,因为 ...
- Uva442
https://vjudge.net/problem/UVA-442 思路: 1)当遇到左括号将字母进栈,遇到右括号将字母出栈. 2) isalpha() 判断一个字符是否是字母 int isalph ...
- kubenetes 1.9 学习 pod - volume -- dashboard
kubelet: the component that runs on all of the machines in your cluster and does things like startin ...
- 阿里云linux服务器打开端口号
之前linux回滚了下,然后就连不上xshell和filezille了,后台安全配置哪里也都打开了端口号了,还是不行.然后我就想重启下ssh服务 ,执行service sshd restart 提示1 ...
- Python中sys模块sys.argv取值并判断
#!usr/bin/env python # -*- coding: utf-8 -*- # Author:Sun Xiaolin import sys judgement = sys.argv[1] ...