In C++ using Polymorphism , correct what\'s missing below, so it follows the req
ID: 3837210 • Letter: I
Question
In C++ using Polymorphism, correct what's missing below, so it follows the requirments
fix the uml -- need italics with virtual functions (UML below)
add the missing virtual destructor
make a monster in main
___________________________________________________________________
Requirements
Create a "mouseClicked" virtual function. Have the Character version say "Should not be called", the nonPlayer say "I am the nonplayer" and the monster say "I am the monster"
Also, have a function in all the classes called “nonVirtual”. All 3 prints out the
class name. (So, nonPlayer’s nonVirtual function prints out “nonPlayer”.)
Then, in the main, create a Character pointer. Then dynamically create a nonPlayer or a Monster (random) and have the Character pointer set to it. Then call "mouseClicked" and "nonVirtual"
Also -- add a UML class diagram of the classes involved in the program.
Once you are done, delete the value pointed to by the Character Pointer.
____________________________________________________________________________
//Charater.h
#include
class character {
private :
int health;
int size;
public:
character();
character(int,int);
int getHealth();
void setHealth(int);
int getSize();
void setSize(int);
void dispaly();
virtual void mouseclicked(void);
void nonVirtual();
};
//Charater.cpp
#include "character.h"
using namespace std;
character ::character()
{
this->health=0;
this->size=10;
}
character :: character(int x=0,int y=10) {
this->health = x;
this-> size = y;
}
int character ::getSize() {
return size;
}
void character :: setSize(int size) {
this->size = size;
}
int character :: getHealth() {
return health;
}
void character :: setHealth(int health) {
this->health = health;
}
void character :: dispaly() {
cout << "I am size " << getSize();
}
void character::mouseclicked()
{
cout<<"Should not be called";
}
void character:: nonVirtual()
{
cout<<"This is character class";
}
//NonPlayer.h
#include "character.h"
class NonPlayer : public character {
private:
bool talkative;
public :
NonPlayer();
bool isTalkative();
void setTalkative(bool);
void display();
void mouseclicked();
void nonVirtual();
};
//NonPlayer.cpp
#include "NonPlayer.h"
using namespace std;
NonPlayer :: NonPlayer() {
talkative = true;
setSize(3);
}
bool NonPlayer :: isTalkative() {
return talkative;
}
void NonPlayer :: setTalkative(bool talkative) {
this-> talkative = talkative;
}
void NonPlayer::mouseclicked()
{
cout<<"I am the nonplayer";
}
void NonPlayer :: display() {
//cout << "Hi, I am" << isTalkative() ? " talkative" : "not talkative " << " and I am size " << getSize();
}
void NonPlayer::nonVirtual()
{
cout<<"This is Nonplayer class";
}
//Monster.h
#include "character.h"
class Monster : public character {
private:
int maxHit;
int minHit;
public :
Monster();
int getMaxHit();
void setMaxHit(int);
int getMinHit();
void setMinHit(int );
void display();
void mouseclicked();
void nonVirtual();
};
//Monster.cpp
#include "Monster.h"
using namespace std;
Monster::Monster() {
maxHit = 30;
minHit = 10;
setSize(7);
}
int Monster::getMaxHit() {
return maxHit;
}
void Monster::setMaxHit(int maxHit) {
this->maxHit = maxHit;
}
int Monster::getMinHit() {
return minHit;
}
void Monster::setMinHit(int minHit) {
this->minHit = minHit;
}
void Monster::display() {
cout << "I hit the max is " << getMaxHit() << " and the min is " << getMinHit() << " I am size " << getSize();
}
void Monster::mouseclicked()
{
cout << "I am the monster";
}
void Monster::nonVirtual()
{
cout << "This is non virtuAL Class";
}
//main.cpp
#include
#include"NonPlayer.h"
using namespace std;
int main()
{
character *c;
NonPlayer *p;
c = new NonPlayer();
c->nonVirtual();
cout << endl;
c->mouseclicked();
cout << endl;
return 0;
}
Explanation / Answer
//main.cpp
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "character.h"
#include "monster.h"
#include "non-player.h"
using namespace std;
int main()
{
std::cout << "Hello world!" << std::endl;
srand(time(0));
int randomNum = (rand() % 2);
if (randomNum < 1){
Monster* char1 = new Monster(1, 1, 1, 1);
(*char1).MouseClicked();
(*char1).nonVirtual();
delete char1;
char1 = NULL;
}
else if (randomNum >= 1){
nonPlayer* char1 = new nonPlayer(true, 1, 1);
(*char1).MouseClicked();
(*char1).nonVirtual();
delete char1;
char1 = NULL;
}
std::cin.get();
return 0;
}
===================================================================
//character.cpp
#include "character.h"
#include <iostream>
using std::cout;
using std::endl;
Character::Character(int health, int size)
{
// cout << "Creating!" << endl;
setHealth(health);
setSize(size);
}
void MouseClicked();
void Character::setHealth(int newHealth){
health = newHealth;
}
void Character::setSize(int newSize){
size = newSize;
}
void Character::displayStats(){
cout << "I am size " << size << ". ";
}
int Character::getHealth(){
return health;
}
int Character::getSize(){
return size;
}
void nonVirtual(){
cout << "Character" << endl;
}
Character::~Character()
{
cout << "Boom! Headshot!" << endl;
}
=========================================================================
//character.h
#ifndef _CHARACTER_H_
#define _CHARACTER_H_
#include <iostream>
using std::cout;
using std::endl;
class Character
{
public:
Character(int health, int size);
virtual void MouseClicked()=0;
void setHealth(int newHealth);
void setSize(int newSize);
void displayStats();
int getHealth();
int getSize();
virtual ~Character();
void nonVirtual();
protected:
int health;
int size;
private:
};
#endif // _CHARACTER_H_
=======================================================================
//monster.cpp
#include "monster.h"
#include "character.h"
Monster::Monster(int maxHit, int minHit, int health, int size):
Character(health, size){
setMaxHit(maxHit);
setMinHit(minHit);
//cout << "Creating monster!" << endl;
}
void Monster::MouseClicked(){
cout << "I now attack you" << endl;
}
void Monster::nonVirtual(){
cout << "Monster" << endl;
}
void Monster::setMaxHit(int max){
maxHit = max;
}
void Monster::setMinHit(int min){
minHit = min;
}
void Monster::displayStats(){
cout << "I hit is " << maxHit << " and the min is " << minHit << ". ";
Character::displayStats();
}
int Monster::getMaxHit(){
return maxHit;
}
int Monster::getMinHit(){
return minHit;
}
=======================================================================
//monster.h
#ifndef _MONSTER_H_
#define _MONSTER_H_
#include "character.h"
class Monster: public Character
{
public:
Monster(int maxHit, int minHit, int health, int size);
virtual void MouseClicked();
void setMaxHit(int max);
void setMinHit(int min);
void displayStats();
int getMaxHit();
int getMinHit();
void nonVirtual();
protected:
int maxHit;
int minHit;
private:
};
#endif // _MONSTER_H_
==================================================================================
//non-player.cpp
#include <iostream>
#include "non-player.h"
nonPlayer::nonPlayer(bool talkative, int health, int size):
Character(health, size){
setTalk(talkative);
};
void nonPlayer::setTalk(bool talk){
talkative = talk;
}
void nonPlayer::MouseClicked(){
cout << "What do you want to trade" << endl;
}
void nonPlayer::getTalk(){
if(talkative){
cout << "talkative";
} else {
cout << "non-talkative";
}
}
void nonPlayer::displayStats(){
cout << "I am ";
getTalk();
cout << " and ";
Character::displayStats();
}
void nonPlayer::nonVirtual(){
cout << "NPC" << endl;
}
===============================================================================
//non-player.h
#ifndef _NON_PLAYER_H_
#define _NON_PLAYER_H_
#include "character.h"
class nonPlayer: public Character
{
public:
nonPlayer(bool talkative, int health, int size);
virtual void MouseClicked();
void setTalk(bool talk);
void displayStats();
void getTalk();
void nonVirtual();
protected:
private:
bool talkative;
};
#endif // _NON_PLAYER_H_
=========================================================================