IN C++ WITH 3 HEADER FILES, 3 IMPLEMENTATION FILES AND ONE MAIN FILE Polymorphis
ID: 3872526 • Letter: I
Question
IN C++ WITH 3 HEADER FILES, 3 IMPLEMENTATION FILES AND ONE MAIN FILE
Polymorphism, Pointers, and Virtual Functions
Construct a base class called athlete. This class should have a member attribute called sport which contains the name of the sport the athlete plays. This class should have two virtual functions called scorePoints() and move().
Write two derived classes from the base athlete class. These classes should pertain to a particular sport. For example, basketballPlayer or baseballPlayer would be subclasses of the athlete class. The derived classes should put the name of the sport by default into the sport member attribute. Additionally, they should redefine the scorePoints() and move() functions with information related that particular sport. For example, a hockeyPlayer class could have “I score points by shooting the puck in the net” for its scorePoints() function and “I move by skating on ice skates” for its move() function.
Your driver file should include a processAthlete() function which accepts as a parameter an object of the base athlete class. In the function, you should call the accessor for the sport attribute, as well as the two virtual functions. The proper information related to the class should be displayed (the name of the sport, how points are scored, and how the athlete moves). This function should be called twice, once for each object of the two different derived classes.
You are required to write header files for the base athlete class as well as the derived athlete classes. Function bodies need to be defined in implementation files and the main function will be in main.cpp. Make sure your program is properly documented.
Explanation / Answer
Seperate header files and implementation files as per your requirement:
#include <iostream>
using namespace std;
class athlete{
protected:
string sport;
athlete(string sport):sport(sport){}
public:
string getSport(){ return sport; }
virtual void scorePoints() { }
virtual void move() { }
};
class baseballPlayer:public athlete{
public:
baseballPlayer():athlete("baseball"){}
void scorePoints() {
cout<<"I score points by hitting the ball";
}
void move() { cout<<"I move by running on pitch"; }
};
class basketballPlayer: public athlete{
public:
basketballPlayer():athlete("basketball"){}
void scorePoints() {
cout<<"I score points by putting ball in basket";
}
void move() { cout<<"I move running with basketball inside the court"; }
};
int main()
{
baseballPlayer player1;
basketballPlayer player2;
processAthlete(player1);
processAthlete(player2);
return 0;
}
void processAthlete(athlete obj)
{
obj.getSport();
obj.scorePoints();
obj.move();
}