C++之过载函数

过载函数的定义:
用同一个函数名定义不同的函数
当函数名和不同的参数搭配时函数的含义不同

过载函数的判断标准:
函数重载至少满足下面的一个条件:
参数个数不同
参数类型不同
参数顺序不同
函数返回值不是函数重载的判断标准

调用重载函数的准则:
将所有同名函数作为候选者
尝试寻找可行的候选函数:
1 )精确匹配实参
2) 通过默认参数能够匹配实参
3) 通过默认类型转换匹配实参
匹配失败:
1) 最终寻找到的可行候选函数不唯一,则出现二义性,编译失败。
2) 无法匹配所有候选者,函数未定义,编译失败。

注意事项:
重载函数在本质上是相互独立的不同函数(静态链编)
重载函数的函数类型是不同的
函数返回值不能作为函数重载的依据
函数重载是由函数名和参数列表决定的。

函数重载和函数指针:
当使用重载函数名对函数指针进行赋值时:
根据重载规则挑选与函数指针参数列表一致的候选者
严格匹配候选者的函数类型与函数指针的函数类型

#include <stdio.h>void print_int(int a)
{printf ("a = %d\n", a);
}void print_char(char c)
{printf ("c = %c\n", c);
}void print_str(char *str)
{printf ("str = %s\n", str);
}// 函数重载:函数名相同,函数的参数不一样,根据调用的时候传的参数类型
// 决定调用哪一个函数
void printA(int a)
{printf ("a = %d\n", a);
}// 参数个数不同
void printA(int a, int b)
{printf ("a = %d, b = %d\n", a, b);
}// 函数重载遇上函数默认参数可能导致 二义性的问题
void printA(int a, int b,int c)
{printf ("a = %d, b = %d, c = %d\n", a, b, c);
}void printA(int a, char *str)
{printf ("a = %d, str = %s\n", a, str);
}void printA(char *str, int a)
{printf ("a = %d, str = %s\n", a, str);
}void printA(char c)
{printf ("c = %c\n", c);
}void printA(char *str)
{printf ("str = %s\n", str);
}// 函数重载的规则:1、参数个数不同 2、参数类型不同 3、参数顺序不同// 函数的返回值不能作为函数重载的判定条件
//int printA(int a)
//{
//
//}int main9_2()
{int a = 10;char c = 'a';char *str = "hello";// printA(10, 20);printA(10,20,30);printA(a);printA(c);printA(str);return 0;
}int main9_1()
{int a = 10;char c = 'a';char *str = "hello";print_int(a);print_char(c);print_str(str);return 0;
}// 对于引用,常量性不同可以作为重载的条件
int sub(int &a, int &b)
{return a - b;
}int sub(const int &a, const int &b)
{return  a - b;
}int main9_3()
{sub(10, 20);int a = 10;int b = 20;sub(a, 10);return 0;
}// 定义一个函数指针类型,有一个 void 返回值,和一个 int 类型的形参
typedef void (*PFUNC)(int);int main()
{// 当将一个重载函数赋给一个函数指针的时候// 严格匹配函数指针的类型PFUNC pfunc = printA;pfunc(10);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/448416.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人民币贬值会让八类人损失惨重!有你吗?

截至20日&#xff0c;人民币本周对美元累计贬值1.24%&#xff0c;年初以来不到三个月时间累计贬值2.79%。分析人士表示&#xff0c;人民币短期内仍有较强下跌压力。本轮人民币急贬预计将对几类人群收入造成严重冲击。 本周以来&#xff0c;人民币对美元即期汇价持续单边下跌。数…

Vue.js 极简小例: 点击事件

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 代码&#xff1a; <template><div> <!-- jy_mothed 是在 js 中自定义的方法 --><button v-on:click"jy_mot…

从最大似然估计到最小二乘法

这一部分内容和吴恩达老师的CS229前面的部分基本一致&#xff0c;不过那是很久之前看的了&#xff0c;我尽可能写的像吴恩达老师那样思路缜密。 1.假设 之前我们了解过最大似然估计就是最大化似然函数$$L(\theta) \sum log(p(x_{i}|\theta))$$ 来确定参数\(\theta\)&#xff0…

C++之类

A&#xff09;封装&#xff0c;是面向对象程序设计最基本的特性。把数据&#xff08;属性&#xff09;和函数&#xff08;操作&#xff09;合成一个整体&#xff0c;这在计算机世界中是用类与对象实现的。 B&#xff09;封装&#xff0c;把客观事物封装成抽象的类&#xff0c;…

APU(美国AMD公司研发的加速处理器)

APU(Accelerated Processing Unit)中文名字叫加速处理器&#xff0c;是AMD“融聚未来”理念的产品&#xff0c;它第一次将中央处理器和独显核心做在一个晶片上&#xff0c;它同时具有高性能处理器和最新独立显卡的处理性能&#xff0c;支持DX11游戏和最新应用的“加速运算”&am…

根本不值得一提的乒乓球国手王浩

最近在看世界乒乓球锦标赛&#xff0c;关于王浩&#xff0c;很多人都说他的技术开创了一个时代&#xff0c;而事实是王浩没有夺过任何世界性大的赛事的单打冠军&#xff0c;我所说的世界性的赛事包括&#xff1a;世界乒乓球锦标赛,奥运会&#xff0c;世界杯&#xff0c;国际乒联…

Vue.js 极简小例:表单 (输入框 input、文本域 textarea、单选框 radio、下拉菜单 selected、复选框 checkbox)

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 代码&#xff1a; <template> <div > <p>---------------------------------------------------------------------…

C++之构造函数和析构函数

一、构造函数 1. 构造函数的定义&#xff1a; 1&#xff09;C中的类可以定义与类名相同的特殊成员函数&#xff0c;这种与类名相同的成员函数叫做构造函数&#xff1b; 2&#xff09;构造函数在定义时可以有参数&#xff1b; 3&#xff09;没有任何返回类型的声明。 2. 构…

显卡常识 电脑显卡基础知识普及

我们组装电脑的时候肯定需要考虑到显卡性能&#xff0c;如果电脑配置中的显卡性能不行&#xff0c;那么电脑肯定玩不了大型游戏。可能一些新电脑用户对显卡一点也不了解&#xff0c;我们下面来详细介绍一下电脑显卡的基础知识。 一、显卡简介 显卡是个人电脑最基本组成部分之一…

操纵浏览器历史记录 : popstate() 、 history.pushState() 、 window.history.pushState()

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 一、历史记录前进与后退 1.后退&#xff1a; window.history.back() -- 相当于用户在浏览器的工具栏上点击返回按钮&#xff1b; 2.前…

C++之拷贝函数

拷贝构造函数是一种特殊的构造函数&#xff0c;函数的名称必须和类名称一致&#xff0c;它的唯一的一个参数是本类型的一个引用变量&#xff0c;该参数是const类型&#xff0c;不可变的。例如&#xff1a;类X的拷贝构造函数的形式为X(X& x)。 以下情况都会调用拷贝构造函数…

spring Boot 学习(七、Spring Boot与开发热部署)

一、热部署在开发中我们修改一个Java文件后想看到效果不得不重启应用&#xff0c;这导致大量时间 花费&#xff0c;我们希望不重启应用的情况下&#xff0c;程序可以自动部署&#xff08;热部署&#xff09;。有以下四 种情况&#xff0c;如何能实现热部署。•1、模板引擎 – 在…

解决: Cannot find module ‘webpack-cli/bin/config-yargs‘、Error: Cannot find module ‘webpack-cli‘

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 npm 、cnpm 、node、vue 全都装上了&#xff0c;就是 webpack 装不上&#xff01;&#xff01; 最后我把整个服务器还原为初始设置了&…

路由器和交换机的区别详解

很多人对路由器和交换机混为一谈&#xff0c;甚至搞不清楚路由器和交换机有什么区别&#xff0c;有的用户还认为是一样的功能&#xff0c;看名字就知道是两种不同的产品&#xff0c;功能虽然有些类似&#xff0c;但绝对不会完全相同&#xff0c;否则就没有必要用两个全面不同的…

C++之构造函数和析构函数强化

构造与析构调用顺序: #include <stdio.h>class Test9_1 { public:Test9_1 (int a){m_a a;printf ("9_1 1111111111111111111构造函数....a: %d\n", a);}// 析构的顺序和构造的顺序相反&#xff0c;先构造的后析构~Test9_1(){printf ("9_1 1111111111111…

Oracle的逆向工程generatorConfig

<?xml version"1.0" encoding"UTF-8"?> <!DOCTYPE generatorConfigurationPUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN""http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> <ge…

最简单、图解:阿里云服务器上装 Docker 、 CentOS上 docker安装(3分钟装完)

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 // 为了装 vue 的 webpack &#xff0c;我把整个服务器重置了。docker 也没有了&#xff0c;只好重新装 docker ... 1. 准备工作 yum …

C++之对象的动态建立和释放

new和delete的用法&#xff1a; 1&#xff09;在软件开发过程中&#xff0c;常常需要动态地分配和撤销内存空间&#xff0c;例如对动态链表中结点的插入与删除。在C语言中是利用库函数malloc和free来分配和撤销内存空间的。C提供了较简便而功能较强的运算符new和delete来取代m…

7.11牛客题(指针)

今天在牛客做错了一道题&#xff0c;在此写下感触题目如下&#xff1a;若有说明:int i, j2,*p&i;,则能完成 ij 赋值功能的语句是&#xff08;B&#xff09;。A i*p; B *p*&j; C i&j; D i**p; 分析&#xff1a;题目中&#xff0c;p指针指向i的地址&#xff0c;A选项…