比较函数使用重载运算符返回不正确的结果
Comparison function returning incorrect results with overloaded operator
我不太确定我的错误在哪里,而且我对编程很陌生,我知道我违反了很多标准化规则。我在学习。用户输入两个整数并进行比较,它总是报告输入的第一个整数更大,即使不应该。我想说我的getlength
方法有问题,但在这一点上我不太确定。
#include "stdafx.h"
#include <iostream>
using namespace std;
template <class T>
//Function to find larger value a = first number, b = second number
T findLargerValue(T a, T b) {
return (a>b ? a:b);
}
//Class trip
template <class T>
class Trip {
public:
Trip<T>::Trip();
Trip(T a){
length = a;
}
T operator>(Trip yourTrip);
T getLength() {
return length;
}
private:
T length;
};
// Template function to carry into
/** This is where I seem to be losing my logic, I am trying to push larger of the two objects to the screen but it is only displaying the first user input This is supposed to take in the two bojects created and measure the lengths.**/
template<class T>
T Trip<T>::operator>(Trip yourTrip) {
if (length > yourTrip.getLength()) {
return length;
}
else{
return yourTrip.getLength();
}
}
template<class T>
Trip<T>::Trip()
{
}
int main()
{
// input for integer values
int num1 , num2 ;
cout << "Enter integer value 1: ";
cin >> num1;
cout << endl << endl;
cout << "Enter integer value 2: ";
cin >> num2;
//display message of first two numbers
cout <<"Frist Number was: " << num1 << " Second Number was: " << num2 << "nThe Larger number of the two is "
<< findLargerValue(num1, num2) << endl << endl;
//input for double values
double num3, num4;
cout << "Enter double value 1: ";
cin >> num3;
cout << endl << endl;
cout << "Enter double value 2: ";
cin >> num4;
//display mesasge of second two numbers
cout << "Frist Number was: " << num3 << " Second Number was: " << num4 << "nThe Larger number of the two is "
<< findLargerValue(num3, num4) << endl << endl;
// Display message for Trip function/objects
int fTlength, sTlength;
cout << "How many miles was your first trip: ";
cin >> fTlength;
Trip<int> fTrip(fTlength);
cout << endl;
cout << "How many miles was your second trip: ";
cin >> sTlength;
Trip<int> sTrip(sTlength);
Trip<int> tripLonger;
tripLonger = findLargerValue(fTrip, sTrip);
cout << "First trip in miles: " << fTlength << endl << "Second Trip in miles: " << sTlength << endl;
cout << "The longest trip was " << tripLonger.getLength() << " miles." << endl;
system("pause");
return 0;
}
您错误地重载了operator >
。它应该返回false
的true
,但它返回(在这种情况下)一个整数值。它应该是这样的:
template<class T>
bool Trip<T>::operator>(const Trip& yourTrip)
{
return length > yourTrip.length;
}
比较运算符应指示比较是否为真。在您的情况下,它返回的是length
或yourTrip.length
。当findLargerValue
为这两个对象调用operator >
时,这是一个问题。它检查结果是否为真,并且因为任何不是0
的整数都是true
,所以它几乎总是返回第一个对象。如果您输入了一个负数和一个0
,它就会返回第二个对象。
相关文章:
- 在C++中返回不正确的楼层函数值
- wcslen() 在使用编译指示包时返回不正确的结果
- 当我输入分数值时,它返回不正确的结果
- ifstream::read 不断返回不正确的值
- C++ 中的 MD5 实现返回不正确的摘要
- MSVC OSVersion 返回不正确的版本
- 'SystemParametersInfo'函数在获取桌面壁纸时返回不正确的值
- c++winsock-recv()返回不正确且奇怪的缓冲区
- Winsock recv() 返回不正确的数据
- C sizeof自定义类返回不正确的值
- 带有绝对路径的LoadLibrary返回不正确的HMODULE,没有任何错误
- 检查两个数组中的相似元素,为某些测试返回正确的值,为其他测试返回不正确的值
- 使用 const 指针的 C 样式字符返回不正确的结果
- Intel TBB parallel_reduce返回不正确的结果
- GetPixel返回不正确的值
- 从 IOCP 线程调用 WSAGetLastError() 将返回不正确的结果
- 计算后缀表达式.pop() 返回不正确的值来计算函数
- 在具有 64 位 CPU 的 32 位 Win8 上运行 32 位 Orwell Dev-C++ - 输入指针返回不正确
- IDirectSound8 setCooperativeLevel 返回不正确的参数
- GetSystemMetrics(SM_CYVIRTUALSCREEN) 返回不正确的高度