c++编程练习 015:看上去好坑的运算符重载 类型转换

北大程序设计与算法(三)
实现自vs2019

描述

 #include  
    using namespace std;
    class MyInt 
    {
      
    	int nVal; 
    	public: 
    	MyInt( int n) {
      nVal = n ;}

// 在此处补充你的代码

    }; 
    int Inc(int n) {
     
    	return n + 1;
    }
    int main () {
      
    	int n;
    	while(cin >>n) {
     
    		MyInt objInt(n); 
    		objInt-2-1-3; 
    		cout << Inc(objInt);
    		cout <<","; 
    		objInt-2-1; 
    		cout << Inc(objInt) << endl;
    	}
    	return 0;
    }
 

输入

多组数据,每组一行,整数n

输出

对每组数据,输出一行,包括两个整数, n-5和n - 8

样例输入

20
30

样例输出

15,12
25,22
来源
Guo Wei

实现

#include  
using namespace std;
class MyInt
{
     
	int nVal;
public:
	MyInt(int n) {
      nVal = n; }
	operator int() {
      return nVal; }
	MyInt& operator-(int n) {
     //返回引用继续对obj减
		this->nVal = this->nVal - n;
		return *this;
	}
};

int Inc(int n) {
     
	return n + 1;
}
int main() {
     
	int n;
	while (cin >> n) {
     
		MyInt objInt(n);//用到已给默认构造函数
		objInt - 2 - 1 - 3;//需要重载-
		cout << Inc(objInt);
		cout << ",";
		objInt - 2 - 1;
		cout << Inc(objInt) << endl;
	}
	return 0;
}

1.重点见注释

2.注意的问题
C++类对象之间的类型转换和重载
类对象和其他类型对象的转换
类型构造函数
转换构造函数

3.重载- 返回对象的引用使得后续可以继续对其操作(引用左值)

4.关于理解方式operator 类型();

一、在 C++ 中,类型的名字(包括类的名字)本身也是一种运算符,即类型强制转换运算符。

类型强制转换运算符是单目运算符,也可以被重载,但只能重载为成员函数,不能重载为全局函数。经过适当重载后,(类型名)对象这个对对象进行强制类型转换的表达式就等价于对象.operator类型名(),即变成对运算符函数的调用。
详见
http://c.biancheng.net/view/244.html

二、
将类对象转换成基本类型
注意
1转换函数必须是类方法
2转换函数不能指定返回类型
3转换函数不能有参数
详见
https://blog.csdn.net/r709651108/article/details/78570915

5.类型转换函数

可以通过operator int()这种类似操作符重载函数的类型转换函数来实现由自定义类型向其他类型的转换。
如将point类转换成int类型等。
在类中定义类型转换函数的形式一般为:
    operator 目标类型名();

有以下几个使用要点:
1 转换函数必须是成员函数,不能是友元形式。
2转换函数不能指定返回类型,但在函数体内必须用return语句以传值方式返回一个目标类型的变量。
3 转换函数不能有参数。

详见
https://www.cnblogs.com/cthon/p/9196231.html

c++编程练习 015:看上去好坑的运算符重载 类型转换_第1张图片

你可能感兴趣的:(c++)