参加了几次笔试,发现有很多c++方面的问题被卡了。从现在开始进攻c++。之后会陆续更新c++学习笔记。

先说说我学习的书籍,大家如果有好的书籍推荐,感谢留言。



暂时是在看这些书自学。

1.C++介绍。

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++的重载 缺省参数和命名空间详解的更多相关文章

  1. 不可或缺 Windows Native (16) - C++: 函数重载, 缺省参数, 内联函数, 函数模板

    [源码下载] 不可或缺 Windows Native (16) - C++: 函数重载, 缺省参数, 内联函数, 函数模板 作者:webabcd 介绍不可或缺 Windows Native 之 C++ ...

  2. linux dd命令参数及用法详解---用指定大小的块拷贝一个文件(也可整盘备份)

    linux dd命令参数及用法详解---用指定大小的块拷贝一个文件 日期:2010-06-14 点击:3830 来源: 未知 分享至:            linux dd命令使用详解 dd 的主要 ...

  3. linux管道命令grep命令参数及用法详解---附使用案例|grep

    功能说明:查找文件里符合条件的字符串. 语 法:grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>] ...

  4. linux mount命令参数及用法详解

    linux mount命令参数及用法详解 非原创,主要来自 http://www.360doc.com/content/13/0608/14/12600778_291501907.shtml. htt ...

  5. 【转】linux expr命令参数及用法详解

    在抓包过程中,查看某个设定时间内,数据上下行多少,用命令expr 计算! --------------------------------------------------------------- ...

  6. linux useradd(adduser)命令参数及用法详解(linux创建新用户命令)

    linux useradd(adduser)命令参数及用法详解(linux创建新用户命令) useradd可用来建立用户帐号.帐号建好之后,再用passwd设定帐号的密码.而可用userdel删除帐号 ...

  7. linux dmesg命令参数及用法详解(linux显示开机信息命令)

    linux dmesg命令参数及用法详解(linux显示开机信息命令) http://blog.csdn.net/zhongyhc/article/details/8909905 功能说明:显示开机信 ...

  8. linux sed命令参数及用法详解

    linux sed命令参数及用法详解 http://blog.csdn.net/namecyf/article/details/7336308 1. Sed简介 sed 是一种在线编辑器,它一次处理一 ...

  9. 使用openURL实现程序间带参数跳转详解

    使用openURL实现程序间带参数跳转详解 实现的效果:有两款应用A与B,A打开B A --> B 1. 新建工程B,bundle ID为com.YouXianMing.B 建立一个URL 这么 ...

随机推荐

  1. September 08th 2017 Week 36th Friday

    Death is so terribly final, while life is full of possibilities. 死亡是冰冷可怕的绝境,而或者却充满了无限的可能. It isn't t ...

  2. php请求页面将返回的页面发送email

    <?php require_once 'CLI_config.php'; require_once dirname(__FILE__).'/../../../../common/framewor ...

  3. 初识android界面布局

    1.活动 活动是android开发中最基本的概念,也是最容易吸引用户的地方,是一种可以包含用户界面的组件. Activity类中定义了7个回调方法,覆盖了活动生命周期的每一个环节.具体如下: (1)o ...

  4. 学习博客之Java继承多态接口

    这一篇博客主要是对软工前一阶段学习的总结,主要是对Java的学习总结,包括三部分:Java的继承.多态和接口 Java的继承 继承是面向对象的三大特性之一,能够实现软件的复用. Java子类继承父类的 ...

  5. php解析xml文件的方法

    最近一段时间在做模板包导入.模板包中包含有xml文件,,需要解析成给定的php数组格式. 我接触到了两种方法,分别是DOMDocument 方法和 simple_load_file. 个人偏好后一种, ...

  6. Uva1001 Say Cheese Floyd

    题意:一个无限大的奶酪里有n个球形的洞,在洞内可以瞬移,不然每一个单位要用10sec,现在给定起始点和结束点,问最短需要耗时多久? 思路:把球形的洞当做是节点,两点之间的距离是两者球心的距离减去两者的 ...

  7. [HNOI2005]汤姆的游戏

    嘟嘟嘟 直接O(n ^ 2)暴力判断就行了. 对于圆,判断该点和圆心的距离是否小于半径. 然而为啥我这么写编译不过: scanf("%lf%lf%lf%lf", &a[++ ...

  8. 集合之subList的缺陷

    我们经常使用subString方法来对String对象进行分割处理,同时我们也可以使用subList.subMap.subSet来对List.Map.Set进行分割处理,但是这个分割存在某些瑕疵. 一 ...

  9. 开源 免费 java CMS - FreeCMS1.9 全文检索

    项目地址:http://code.google.com/p/freecms/ 全文检索 从FreeCMS 1.7開始支持 仅仅有创建过索引的对象才干被lucene类标签查询到. 信息类数据会在信息更新 ...

  10. Windows安装TensorFlow遇到错误

    1.先检查系统是64还是32位的,检查python版本是否相符合 2.windows系统上使用tensorflow需要python3.5版本