- 题目说明
【问题描述】完成下面代码,使程序运行结果正确(求两对象的最大值)。
【输入形式】整数1 整数2 浮点数1 浮点数2 字符串1 字符串2
【输出形式】整数 浮点数 字符串
【样例输入】1 2 3.4 5.2 Zhang Li
【样例输出】2 5. Zhang
- 题目要求
使用运算符重载解决这道题
- 代码实现
bool operator>(const String& test)
{
int i = 0;
int a = (strlen(test.pData) < strlen(this->pData)) ? strlen(test.pData) : strlen(this->pData);
for (i = 0; i < a; i++)
{
if (test.pData[i] > this->pData[i])
return false;
else
return true;
}
if (i == a)
{
if (strlen(test.pData) < strlen(this->pData))
return false;
else
return true;
}
}
- 完整代码
#include<iostream>
#include<string.h>
using namespace std;
class String
{
char* pData;
public:
String(){ pData = NULL; }
String(const char* pStr){
int len=strlen(pStr);
pData=new char[len+1];
strcpy(pData,pStr);
}
//拷贝构造函数定义
String(
const String &p
)
{
int len=strlen(pData);
pData=new char[len+1];
strcpy(pData,p.pData);
}
~String()
{
delete [] pData;
}
// ">" 运算符重载
bool operator>(const String& test)
{
int i = 0;
int a = (strlen(test.pData) < strlen(this->pData)) ? strlen(test.pData) : strlen(this->pData);
for (i = 0; i < a; i++)
{
if (test.pData[i] > this->pData[i])
return false;
else
return true;
}
if (i == a)
{
if (strlen(test.pData) < strlen(this->pData))
return false;
else
return true;
}
}
//采用友元形式完成输出运算符重载
friend ostream& operator << (ostream& out, const String& obj);
};
//输出运算符重载
ostream& operator << (ostream& out, const String& obj)
{
cout << obj.pData;
return cout;
}
// 设计GetMax函数模板
template<class T>
T GetMax(T a,T b)
{
return (a > b) ? a : b;
}
int main()
{
int aInt = 0, bInt = 0;
float aFloat = 0.0f, bFloat = 0.0f;
char temp[50];
cin >> aInt >> bInt >> aFloat >> bFloat;
cin >> temp;
String aString(temp);
cin >> temp;
String bString(temp);
cout << GetMax(aInt, bInt) << " ";
cout << GetMax(aFloat, bFloat) << " ";
cout << GetMax(aString, bString) << endl;
}
- 心得体会
由于本人大一下学期学的是c++,因为它是一门考查课,导致课程安排比较少,学的感觉也比较浅,对于运算符重载呢,可以说我是不会的,但因为明天就要期末考试,便只能硬着头皮学并且希望可以弄懂。