1.什么是占位参数?
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13void test1(int a, int){ /* 这里的参数列表中的int就是一个占位参数; 占位参数没有参数名,只有一个数据类型,且没办法在函数体中使用; 占位参数可以有默认值,当没有默认值时,必须在调用函数时给占位参数传值; */ } void test2(int a, int = 123) test1(10); //错误调用。占位参数没有默认值,调用时也未传值 test1(10, 114514);//正确调用 test2(10); //正确调用 test2(10, 114514);//正确调用,传进的值(114514)会覆盖默认值(123),但是用不到,没什么意义
2.占位参数的作用
下面通过重载自增运算符的前置++和后置++来说明占位参数的用途。
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52#include<iostream> using namespace std; //自定义数据类型 class MyInteger { //重载左移运算符<<,为了输出自定义数据类型。 //声明为友元函数是为了调用自定义数据类型MyInteger的私有成员变量 friend ostream& operator<<(ostream& out, MyInteger m_int); public: MyInteger(int n=0):m_num(n) {} //重载前置++运算符 MyInteger& operator++() { ++m_num;//m_num++; return *this; } //重载后置++运算符 /* Q1: 为什么前置++返回的是自定义数据类型的引用,后置++返回的是自定义数据类型? 因为要先输出当前值,再返回++后的值,所以返回值类型不能为当前数的引用(当前数的引用是++后的值), 只能返回++前的值。后置--一样,所以后置++和--没办法连续进行,比如a++++后,最后a的结果就只加了一次。 Q2: 占位参数在这里的作用 这里用到了占位参数,用来区分前置++和后置++,这里使用占位参数的是后置++。 有的人就问了:凭什么有占位参数的是后置++,前置++不能是有占位参数的吗? 答:问得好,能,前置后置二者其一有占位参数就行,主要目的是区分开前置和后置, 但最后调用有些区别,后面调用的时候会说。 注意:这里只能用int数据类型作占位参数,因为自增和自减操作针对的是整数类型。 */ MyInteger operator++(int) { MyInteger tmp = *this; ++m_num;//m_num++; return tmp; } private: int m_num; }; //重载左移运算符<< ostream& operator<<(ostream& out, MyInteger m_int) { out << m_int.m_num; return out; } int main() { MyInteger m_int1;//默认值为0 cout << ++++m_int1 << endl;//2 cout << m_int1 << endl;//2 cout << m_int1++ << endl;//2 cout << m_int1 << endl;//3 /* 上面说到的后置++我加了占位参数,所以这里调用的时候要传一个整型参数 */ cout << m_int1.operator++(5646) << endl; return 0; }
3.我的一点理解
前面提到了占位参数可以区分前置++和后置++,实质上就是可以用来做函数重载。那么,在调用的时候,如果写成++m_int1
或者m_int1++
的形式,怎么能知道调用的是前置自增还是后置自增呢?首先说明一点,如果直接用m_int1.operator++(5646)
,那调用的就是后置++(我的上述代码写的是后置++,你也可以改前置++);用m_int1.operator++()
调用的就是前置++。
如果用++m_int1
或者m_int1++
的形式,前置自增++m_int1
调用的是无参重载函数,后置自增调用的是有参(占位参数)重载函数。
(这是经过实验得出的结论,具体为什么还不是很清楚,欢迎大家指正!)
最后
以上就是懦弱日记本最近收集整理的关于cpp占位参数在重载运算符中的作用的全部内容,更多相关cpp占位参数在重载运算符中内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复