【C++自我精讲】基础系列三 重载
分二部分:函数重载,操作符重载。
函数重载:指在同一名字空间中,函数名称相同,参数类型、顺序或数量不同的一类函数,同一函数名的函数能完成不同功能。
//非函数重载,只是返回值不一样
void Fun(int i);
int Fun(int i); //非函数重载,不在同一名字空间
namespace A
{
int Add(int i, int j);
};
namespace B
{
float Add(float i, float j);
}; //函数重载
int Add(int i, int j);
float Add(float i, float j);
重命名机制:函数重载的名称都是一模一样的,C++编译器就是通过重命名机制来区别这些同名函数的(不同的C++编译器,重命名机制可能不一样)。
//重命名机制
void Fun(int i, double j); //c++编译器把函数名Fun其实重命名为_Fun_int_double
void Fun(double i, int j); //c++编译器把函数名Fun其实重命名为_Fun_double_int
C++调用C 函数:C++提供了一个C 连接交换指定符号extern“C”来解决这个问题。
void Fun(int i, ini j); C 编译器编译后的名字为_Fun。
void Fun(int i, int j); C++编译器编译后的名字为_Fun_int_int。
C 编译器和C++编译器产生的名字不同,所以C++不能直接调用C 函数。用extern“C”解决。
extern "C"
{
//头文件
#include “header.h”
//函数
void Fun(int i, int j);
}
操作符重载:指用关键字operator加运算符表示的函数。可以把其理解为特殊形式的函数,运算符本身是函数名。
int Add(int i, int j); //普通函数
int operator+(int i, int j); //+运算符函数
//用法
int k = Add(, );
int m = + ;
操作符重载规则:

ps:后面讲到类时再结合例子讲解下操作符重载为成员函数。
【C++自我精讲】基础系列三 重载的更多相关文章
- 【C++自我精讲】基础系列二 const
[C++自我精讲]基础系列二 const 0 前言 分三部分:const用法.const和#define比较.const作用. 1 const用法 const常量:const可以用来定义常量,不可改变 ...
- 【C++自我精讲】基础系列一 指针与引用
[C++自我精讲]基础系列一 指针与引用 一 前言 指针.引用.指针与引用区别. 二 指针 变量:代码中常常通过定义变量来申请并命名存储空间,并通过变量的名字来使用这段存储空间. //变量 ...
- 【C++自我精讲】基础系列四 static
[C++自我精讲]基础系列四 static 0 前言 变量的存储类型:存储类型按变量的生存期划分,分动态存储方式和静态存储方式. 1)动态存储方式的变量,生存期为变量所在的作用域.即程序运行到此变量时 ...
- 【C++自我精讲】基础系列六 PIMPL模式
[C++自我精讲]基础系列六 PIMPL模式 0 前言 很实用的一种基础模式. 1 PIMPL解释 PIMPL(Private Implementation 或 Pointer to Implemen ...
- 【C++自我精讲】基础系列五 隐式转换和显示转换
[C++自我精讲]基础系列五 隐式转换和显示转换 0 前言 1)C++的类型转换分为两种,一种为隐式转换,另一种为显式转换. 2)C++中应该尽量不要使用转换,尽量使用显式转换来代替隐式转换. 1 隐 ...
- java基础系列(三)---HashMap
java基础系列(三)---HashMap java基础系列 java基础系列(一)---String.StringBuffer.StringBuilder java基础系列(二)---Integer ...
- unity官方案例精讲(第三章)--星际航行游戏Space Shooter
案例中实现的功能包括: (1)键盘控制飞船的移动: (2)发射子弹射击目标 (3)随机生成大量障碍物 (4)计分 (5)实现游戏对象的生命周期管理 导入的工程包中,包含着一个完整的 _scene--- ...
- es6基础系列三:解构赋值
解构就是ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值(只能用于数组,对象或迭代器).如果解构不成功,则等于undefined,但不能赋值为undefined和null,因为undefi ...
- 夯实基础系列四:Linux 知识总结
前言 前三节内容传送门: 夯实基础系列一:Java 基础总结 夯实基础系列二:网络知识总结 夯实基础系列三:数据库知识总结 现在很多公司项目部署都使用的是 Linux 服务器,互联网公司更是如此.对于 ...
随机推荐
- zookeeper伪分布式集群安装
1.安装3个zookeeper 1.1创建集群安装的目录 1.2配置一个完整的服务 这里不做详细说明,参考我之前写的 zookeeper单节点安装 进行配置即可,此处直接复制之前单节点到集群目录 创建 ...
- vue 不能监测数组长度变化length的原因
由于 JavaScript 的限制,Vue 不能检测以下变动的数组: 当你利用索引直接设置一个项时,例如:vm.items[indexOfItem] = newValue 当你修改数组的长度时,例如: ...
- linux下自己下载的程序装哪?
有两个选择: /usr/local:类似于C:\Program Files /opt:类似于D:\soft 其实都可以,关键是保持一致.
- 在Docker中执行web应用
启动一个简单的web 应用 使用社区提供的模板,启动一个简单的web应用,熟悉下各种Docker命令的使用: # docker run -d -P training/webapp python app ...
- struct2常用标签
Struts2常用标签总结 一 介绍 1.Struts2的作用 Struts2标签库提供了主题.模板支持,极大地简化了视图页面的编写,而且,struts2的主题.模板都提供了很好的扩展性.实现了 ...
- 阿里云视频服务SDK
原文地址:https://help.aliyun.com/document_detail/51992.html?spm=5176.doc52200.6.668.Sn3AjC SDK下载 更新时间:20 ...
- @@identity、scope_identity()、IDENT_CURRENT('tablename')函数的区别
@@IDENTITY 和SCOPE_IDENTITY 返回在当前会话中的任何表内所生成的最后一个标识值.但是,SCOPE_IDENTITY 只返回插入到当前作用域中的值:@@IDENTITY 不受限于 ...
- 在linux下运行jmeter
之前在用JMeter做性能测试时基本都用自己的笔记本电脑. 考虑到网络传输和占用系统资源情况时进行了以下分析: 1 在笔记本上,开始-cmd "ping 服务器",得到传输时间.在 ...
- atitit.浏览器插件解决方案----ftp插件 attilax 总结
atitit.浏览器插件解决方案----ftp插件 attilax 总结 1. 界面概览 D:云盘同步文件夹p5p5f tp.demo.html1 2. 初始化1 3. 事实调用2 4. 参考2 ...
- JAVA设计模式之 命令模式【Command Pattern】
一.概述 命令模式能够将请求发送者和接收者全然解耦.发送者与接收者之间没有直接引用关系,发送请求的对象仅仅须要知道怎样发送请求,而不必知道怎样完毕请求.核心在于引入了命令类,通过命令类来减少发送者和接 ...