C++学习 -- 重载和缺省参数

重载和缺省参数

什么是重载?

重载简单来说就是依次多义。所谓函数重载是指同 一个函数名可以对应着多个函数的实现

为什么要重载?

主要是两个原因:
1. 不想使用printf_int(), printf_char(), printf_float() 来打印不同数据类型的字符。类似这样的问题,可以使用重载来解决。
2. 构造函数
因为构造函数的名字预先由类的名字确定,所以只 能有一个构造函数名。但如果我们想用几种方法来创建一个对象时该怎么办呢?例如创建一个类,它可以用标准的方法初始化,也可以从文件中读取信息来初始化, 我们就需要两个构造函数,一个不带参数(缺省构造函数),另一个带一个字符串作为参数,
以表示用于初始化对象的文件的名字。所以函数重 载的本质就是允许函数同名。在这种情况下,构造函数是以不同的参数类型被调用的。

重载的实质?

其实是在编译的时候,函数名会被转换成如下的格 式进行匹配:printf(int int)=>prinf_int()

为什么不用返回值重载?

因为使用者可以不处理返回值,如下
void f()和int f()两个函数,使用者在调用的时候可以直接写成
f(),如果使用返回值重载,那么编译器将不知道该使用那个函数。

缺省参数为什么只能发在后面?
F(int i, int j, int k=1, int l=0)  为什么缺省参数要放在后面?
例如: f(int i, int j=0, int k, int l =0)不能处理 f(3, 4, 5),编译器无法判断哪个数缺省参数。
缺省参数只在说明的时候指出,定义处不重新定义,但通常要加一个注释.

问个小问题,在一个类中有下面两个函数
    void add(int i=1) {cout << add(int i=1)<< endl;};
    void add() {cout << add()<< endl;};
当使用add()时,会调用那一个?
结论是编译不能通过。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++中,我们可以使用缺省构造函数来创建一个对象数组。 缺省构造函数是指在定义类时没有显式定义任何构造函数的情况下,默认生成的构造函数。它不带任何参数,并且没有函数体,其作用是为对象提供默认的初始化。 如果我们将一个类定义为数组的元素类型,可以使用缺省构造函数来创建一个对象数组。例如,假设我们有一个名为Person的类,没有任何构造函数的定义。我们可以通过以下方式创建一个Person对象数组: Person arr[5]; 上述代码将创建一个名为arr的Person对象数组,数组中包含了5个Person对象。由于缺省构造函数的存在,每个元素都会被默认初始化为该类的默认值。具体的初始化规则取决于成员变量的类型和定义。如果在Person类中定义了成员变量的默认值,那么每个元素都将被初始化为这些默认值。 如果我们想要自定义初始化每个元素,可以通过重载构造函数的方式来实现。这样,在创建对象数组时,我们也可以传递参数来初始化每个元素。例如,如果我们想要将数组中的每个Person对象的年龄初始化为25岁,可以定义一个带有参数的构造函数,并使用如下方式创建数组: Person arr[5] = { Person(25), Person(25), Person(25), Person(25), Person(25) }; 上述代码将创建一个Person对象数组,其中每个元素的年龄被初始化为25岁。 总结起来,通过使用缺省构造函数,我们可以方便地创建对象数组,并根据需要进行默认初始化或自定义初始化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值