C++函数的默认参数

在C++中,定义函数时可以给形参指定一个默认的值,这样调用函数时如果没有给这个形参赋值(没有对应的实参),那么就使用这个默认的值。也就是说,调用函数时可以省略有默认值的参数。如果用户指定了参数的值,那么就使用用户指定的值,否则使用参数的默认值。

所谓默认参数,指的是当函数调用中省略了实参时自动使用的一个值,这个值就是给形参指定的默认值。示例:

#include<iostream>
using namespace std;//带默认参数的函数
void func(int n, float b=1.2, char c='@'){cout<<n<<", "<<b<<", "<<c<<endl;
}int main(){//为所有参数传值func(10, 3.5, '#');//为n、b传值,相当于调用func(20, 9.8, '@')func(20, 9.8);//只为n传值,相当于调用func(30, 1.2, '@')func(30);return 0;
}

运行结果:

10, 3.5, #
20, 9.8, @
30, 1.2, @

定义一个带有默认参数的函数 func(),并在 main() 函数中进行了不同形式的调用。

指定了默认参数后,调用函数时就可以省略对应的实参了。

默认参数除了使用数值常量指定,也可以使用表达式指定,例如:

float d = 10.8;
void func(int n, float b=d+2.9, char c='@'){cout<<n<<", "<<b<<", "<<c<<endl;
}

C++规定,默认参数只能放在形参列表的最后,而且一旦为某个形参指定了默认值,那么它后面的所有形参都必须有默认值。实参和形参的传值是从左到右依次匹配的,默认参数的连续性是保证正确传参的前提。

下面的写法是正确的:

void func(int a, int b=10, int c=20){ }
void func(int a, int b, int c=20){ }

但这样写不可以:

void func(int a, int b=10, int c=20, int d){ }
void func(int a, int b=10, int c, int d=20){ }

默认参数只是提供了一种便捷的方式。在以后设计类时你将发现,通过使用默认参数,可以减少要定义的析构函数、方法以及方法重载的数量。

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

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

相关文章

python复制文件夹不阻塞_python学习笔记-(十四)I/O多路复用 阻塞、非阻塞、同步、异步...

1. 概念说明1.1 用户空间与内核空间现在操作系统都是采用虚拟存储器&#xff0c;那么对32位操作系统而言&#xff0c;它的寻址空间(虚拟存储空间)为4G(2的32次方)。操作系统的核心是内核&#xff0c;独立于普通的应用程序&#xff0c;可以访问受保护的内存空间&#xff0c;也有…

java某个类避免findbug检查_Findbug插件静态java代码扫描工具使用

本文转自http://blog.csdn.net/gaofuqi/article/details/22679609 感谢作者FindBugs 是由马里兰大学提供的一款开源 Java静态代码分析工具。FindBugs通过检查类文件或 JAR文件&#xff0c;将字节码与一组缺陷模式进行对比从而发现代码缺陷&#xff0c;完成静态代码分析。FindBu…

Spring 是什么

Spring 是一个主流的 Java Web 开发框架&#xff0c;该框架是一个轻量级的应用框架&#xff0c;具有很高的凝聚力和吸引力。 Spring 是分层的 Java SE/EE full-stack 轻量级开源框架&#xff0c;以 IoC&#xff08;Inverse of Control&#xff0c;控制反转&#xff09;和 AOP&…

4乘4方格走的路线_苏州周边4个冷门自驾游路线景点推荐

1.崇明东滩崇明东滩湿地公园有两大看点&#xff0c;一是看候鸟迁徙&#xff0c;二是看日出和星空。东滩湿地滩涂辽阔&#xff0c;低头是大片的芦苇&#xff0c;抬头是满天斑斓的云彩&#xff0c;顺着木栈道走在公园内&#xff0c;如与大自然融为一体&#xff0c;可360度将美景收…

matlab程序转java_用面向对象的方法将一段JAVA代码转化为matlab

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼public class Variable {/*list of variables this variable is connected to. */ Vector neighbors;/* id of this variable */public int varID;/* id of agent this variable belongs to. */public int agentID;/** The domain …

Spring体系结构详解

Spring 框架采用分层架构&#xff0c;根据不同的功能被划分成了多个模块&#xff0c;这些模块大体可分为 Data Access/Integration、Web、AOP、Aspects、Messaging、Instrumentation、Core Container 和 Test。 Spring的体系结构如下图所示 图中包含了 Spring 框架的所有模块…

python时间戳是什么意思_Python-时间戳

# import time# 返回时间戳# print(time.time()) #返回时间戳# print(time.gmtime()) #返回utc时间戳# print(time.localtime(time.time()-86400)) #返回当地的时间戳# print(time.strftime("%Y-%m-%d",time.localtime())) #将struct_time转为字符串# print(time.mkt…

java对外查询接口注意的地方_Java接口注意点

1、接口可以多实现&#xff1a;一个实现类可以同时实现多个接口package com.qf.demo02_interface;//定义一种规则&#xff1a;interface A{public void testA();//public void fun();}//定义另一种规则interface B{public void testB();public void fun();}//实现类&#xff0c…

Spring目录结构和基础JAR包介绍

目前 Spring 框架的最新版本是 5.1.8&#xff0c;本教程是基于 Spring 的稳定版本 3.2.13 进行讲解的。读者可以通过网址 http://repo.spring.io/simple/libs-release-local/org/springframework/spring/ 下载名称为 springframework-3.2.13.RELEASE-dist.zip 的压缩包。单击此…

自定义依赖注解无效_SpringValidation用注解代替代码参数校验解析

Spring Validation概念在原先的编码中&#xff0c;我们如果要验证前端传递的参数&#xff0c;一般是在接受到传递过来的参数后&#xff0c;手动在代码中做 if-else 判断&#xff0c;这种编码方式会带来大量冗余代码&#xff0c;十分的不优雅。因此&#xff0c;推出了用注解的方…

mysql开源许可_为什么开源数据库改变许可证?

CockroachDB 是一个开源的分布式数据库&#xff0c;最近改变了代码授权&#xff0c;放弃了 Apache 许可证。一、CockroachDB 的许可证变更CockroachDB 以前的许可证是 Apache&#xff0c;代码托管在 GitHub&#xff0c;任何人都可以访问。现在的许可证改成了"商业源码许可…

Spring IoC容器

我们将详细介绍 Spring 的 Ioc 容器。 IoC 是指在程序开发中&#xff0c;实例的创建不再由调用者管理&#xff0c;而是由 Spring 容器创建。Spring 容器会负责控制程序之间的关系&#xff0c;而不是由程序代码直接控制&#xff0c;因此&#xff0c;控制权由程序代码转移到了 S…

python相同怎么写_这两个index相同的dataframe我想把他们merge,怎么写?

能具体点么&#xff1f;这是这两df的代码# -*- coding: utf-8 -*-import pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport tracebackfrom tools import *import matplotlib as mplimport pickleimport datetime as dtdf1 pd.DataFrame({A0: [A0, A1, …

python里删除range里的数字_python中range函数与列表中删除元素

一、range函数使用range(1,5) 代表从1到4(不包含5)&#xff0c;结果为&#xff1a;1,2,3,4 &#xff0c;默认步长为1range(1,5,2) 结果为&#xff1a;1, 3 (同样不包含5) &#xff0c;步长为2range(5,-1,-1) 反向输出&#xff0c;结果为&#xff1a;5,4,3,2,1,0 &#…

python中print又可将数据写入文件_Python第五课-将写入文件的列表格式化

1、上节课代码中的问题 第四课中介绍了python持久化的基础实例——将数据写入文本文件。 可当我们试着把保存数据的文件读取出来会怎样呢&#xff1f; try: with open(man.txt, r) as fman: print(fman.readline())except IOError as err: print(str(err)) 执行时&#xff0c;1…

Spring 依赖注入的实现

依赖注入&#xff08;Dependency Injection&#xff0c;DI&#xff09;和控制反转含义相同&#xff0c;它们是从两个角度描述的同一个概念。 当某个 Java 实例需要另一个 Java 实例时&#xff0c;传统的方法是由调用者创建被调用者的实例&#xff08;例如&#xff0c;使用 new…

arduino倾斜开关python语言_Arduino小白的学习记录:倾斜开关实验

一、介绍带有金属球的球形倾斜开关&#xff0c;它用于检测小角度的倾斜。图7.1 倾斜开关模块二、材料准备Arduino Uno 主板*1USB数据线*1倾斜开关模块*1杜邦线若干三、实验原理在倾斜开关中小球以不同的倾斜角度移动以造成触发电路的原理。倾斜开关模块使用双向传导的球形倾斜开…

Spring Bean的配置及常用属性

作为 Spring 核心机制的依赖注入&#xff0c;改变了传统的编程习惯&#xff0c;对组件的实例化不再由应用程序完成&#xff0c;转而交由 Spring 容器完成&#xff0c;在需要时注入应用程序中&#xff0c;从而对组件之间依赖关系进行了解耦。这一切都离不开 Spring 配置文件中使…

java 静态对象语法_04.Java 语法

计算机基础知识表达式(expression)&#xff1a;Java中最基本的一个运算。比如一个加法运算表达式。12是一个表达式&#xff0c;ab也是。计算机内存的最小存储单元是字节(byte)&#xff0c;一个字节就是一个8位二进制数&#xff0c;即8个bit。它的二进制表示范围从00000000~1111…

python 化学模块_Python chemif包_程序模块 - PyPI - Python中文网

实施解决这个问题的方法是使用一个while循环的递归下降算法。这个循环的基本结构是&#xff1a;todo [[item1, processing_data],[item2, processing_data], ... ]done []while len(todo)>0:item_to_workon todo.pop()for each_branch in branches:stuff.do()data.proces…