#410 – Overloading the == Operator for a Value Type
September 13, 2011 3 Comments
A user-defined struct automatically inherits an Equals method that performs a value equality check by comparing each field of the struct. The == operator, however, is not automatically defined. If you want to use the == operator for instances of a struct, you need to overload the == operator.
public struct PersonHeight { public int Feet { get; set; } public int Inches { get; set; } public PersonHeight(int feet, int inches) : this() { Feet = feet; Inches = inches; } public static bool operator ==(PersonHeight ph1, PersonHeight ph2) { return (ph1.Feet == ph2.Feet) && (ph1.Inches == ph2.Inches); } public static bool operator !=(PersonHeight ph1, PersonHeight ph2) { return !(ph1 == ph2); } }
Some test cases:
PersonHeight ph1 = new PersonHeight(5, 10); PersonHeight ph2 = new PersonHeight(5, 10); // Returns true, default Equals method compares each field bool check = ph1.Equals(ph2); // == operator also now works - true check = (ph1 == ph2);
can you help? I am receiving LOTs of errors….
#include
#include
#include
using namespace std;
struct electionList
{
void print() const;
void voteTotal();
void solvePercentage();
void calcWinner();
int votes[100];
double percentage[100];
string candidates[2];
int count;
int total;
};
//CALCULATES TOTAL AMOUNT OF VOTES FOR EACH CANDIDATE
void electionList::print() const
{
cout<<"Candidate"<<"Votes Received"<<"% of Votes"<<endl;
for (int i=0; i<count; i++)
{
cout<<candidates[i];
cout<<votes[i];
cout<< percentage[i];
}
cout<<"Total"<<total<<endl;
}
void electionList::voteTotal()
{
int total;
for (int i=0; i<count; i++)
{
total = total + votes[i];
}
}
//CALCULATES PERCENTAGE OF VOTES FOR EACH CANDIDATE
void electionList::solvePercentage()
{
for (int i=0; i<count; i++)
{
percentage[i] = ((votes[i]/total)*(100));
}
}
//cOMPARES NUMBER OF VOTES FOR WINNER
void electionList::calcWinner()
{
string winner = candidates[0];
int max = votes[0];
for (int i=0; imax)
{
max = votes[i];
winner = candidates[i];
}
}
};
int main()
{
electionList election;
electionList insert();
string name;
int count;
int tally;
string candidate[100];
int votes[100];
//INPUT DATA
cout<> count;
for (int i=0; i<count; i++)
{
cout<>name>>tally;
candidate[i]=name;
votes[i]=tally;
//candidate->insert(i,name)>>votes->insert(i, votes);
}
count = 1;
candidate[1]=”thomas”;
votes[1] = 300;
cout<<candidate[1]<<votes[1];
// OUTPUT RESULTS
cout<<"election result";
election.print();
cout<<"election vote total";
election.voteTotal();};
Did you write this code yourself, or just copy it from somewhere? How are you trying to compile it? It looks like C++ code, so if you’re trying to use a C# compiler to compile it, you’ll certainly get a lot of errors. :O)
I write it but rewrote it and it finally started working…nice site