Operator overloading
redefine operators for specific classes
main.cpp
// Project_11-02
// Name: Aliens
#include <iostream>
#include "Alien.h"
using namespace std;
int main() {
cout << "/---------------------------------------------------\\" << endl;
cout << "| Aliens |" << endl;
cout << "| ================================= |" << endl;
cout << "| Course: The Complete C++ Developer Course |" << endl;
cout << "| Instructor: John P. Baugh, Ph.D. |" << endl;
cout << "| Student: Patrick Kox |" << endl;
cout << "\\---------------------------------------------------/" << endl << endl;
Alien alien1(185, 94, 'F');
Alien alien2(176,97, 'M' );
Alien alien7 = alien1 + alien2;
cout << boolalpha;
cout << "alien1 == alien2 : " << (alien1 == alien2) << endl;
cout << "alien1 != alien2 : " << (alien1 != alien2) << endl << endl;
cout << "alien1 < alien2 : " << (alien1 < alien2) << endl;
cout << "alien1 > alien2 : " << (alien1 > alien2) << endl;
cout << "alien1 <= alien2 : " << (alien1 <= alien2) << endl;
cout << "alien1 >= alien2 : " << (alien1 >= alien2) << endl;
Alien alien3 = alien1 + alien2;
Alien alien4 = alien3 + alien2;
Alien alien5 = alien3 + alien4;
Alien alien6 = alien4;
cout << endl << endl;
cout << "Alien1 and Alien2's children:" << endl;
cout << "Alien3: height :" << alien3.getHeight() << " weight :" << alien3.getWeight() << " gender :" << alien3.getGender()<< " prestige :" << alien3.getPrestige() << endl;
cout << "Alien4: height :" << alien4.getHeight() << " weight :" << alien4.getWeight() << " gender :" << alien4.getGender() << " prestige :" << alien4.getPrestige() << endl;
cout << "Alien5: height :" << alien5.getHeight() << " weight :" << alien5.getWeight() << " gender :" << alien5.getGender() << " prestige :" << alien5.getPrestige() << endl;
cout << endl << endl;
cout << "Alien6 = alien4" << endl;
cout << "Alien6: height " << alien6.getHeight() << " weight " << alien6.getWeight() << " gender " << alien6.getGender( ) << endl;
cout << "Alien5: height :" << alien7.getHeight() << " weight :" << alien7.getWeight() << " gender :" << alien7.getGender() << " prestige :" << alien7.getPrestige() << endl;
cout << endl << endl;
cout << "Aliens prestige system: " << endl;
cout << "Alien1 : " << alien1.getPrestige() << endl;
cout << "Alien2 : " << alien2.getPrestige() << endl;
cout << "Alien3 : " << alien3.getPrestige() << endl;
cout << "Alien4 : " << alien4.getPrestige() << endl;
cout << "Alien5 : " << alien5.getPrestige() << endl;
cout << "Alien6 : " << alien6.getPrestige() << endl;
cout << endl;
return 0;
}
Alien.h
#ifndef ALIEN_H
#define ALIEN_H
using namespace std;
class Alien
{
public:
// constructor
Alien(int weight, int height, char gender);
// getters
int getWeight() const;
int getHeight() const;
char getGender() const;
int getPrestige() const;
// Operator Overloads
bool operator==(Alien& other);
bool operator!=(Alien& other);
bool operator>(Alien& other);
bool operator>=(Alien& other);
bool operator<(Alien& other);
bool operator<=(Alien& other);
Alien operator+(Alien& other);
Alien operator=(Alien& other);
private:
int weight;
int height;
char gender;
};
#endif
Alien.cpp
#include "Alien.h"
#include <ctime>
#include <cstdlib>
#include <iostream>
using namespace std;
Alien::Alien(int weight, int height, char gender)
{
this->weight = weight;
this->height = height;
this->gender = gender;
}
// getters
int Alien::getWeight() const
{
return weight;
}
int Alien::getHeight() const
{
return height;
}
char Alien::getGender() const
{
return gender;
}
int Alien::getPrestige() const
{
int prestige = (height * weight);
if (gender == 'M' || gender == 'm') {
prestige *= 2;
}
if (gender == 'F' || gender == 'f') {
prestige *= 3;
}
return prestige;
}
// Operator Overloads
bool Alien::operator==(Alien& other)
{
return getPrestige() == other.getPrestige();
}
bool Alien::operator!=(Alien& other)
{
return getPrestige() != other.getPrestige();
}
bool Alien::operator>(Alien& other)
{
return getPrestige() > other.getPrestige();
}
bool Alien::operator>=(Alien& other)
{
return getPrestige() >= other.getPrestige();
}
bool Alien::operator<(Alien& other)
{
return getPrestige() < other.getPrestige();
}
bool Alien::operator<=(Alien& other)
{
return getPrestige() <= other.getPrestige();
}
Alien Alien::operator+(Alien& other)
{
int tempHeight = (height + other.height) / 2;
int tempWeight = (weight + other.weight) / 2;
char tempGender;
srand(time(nullptr)); // for random number generator
int randomGender = rand() % 10 + 1; // 1, 3 and 7 are Female, others are male.
if (randomGender == 1 || randomGender == 3 || randomGender == 7) {
tempGender = 'F';
}
else {
tempGender = 'M';
}
return Alien(tempWeight, tempHeight, tempGender);
}
Alien Alien::operator = (Alien& other)
{
Alien tempAlien(other.height, other.weight, other.gender);
return tempAlien;
}