Polymorphism with virtual function
May 18, 2015 at 10:07am UTC
error C4700: uninitialized local variable 'a' used in main.cpp
I want to use virtal void sounds() - function but can´t get it to work.
Don´t know what I´m doing wrong here. Anybody knows how to do the magic?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
//Animals.h - Base/Parent Class
//Animal class definition.
#ifndef ANIMALS_H
#define ANIMALS_H
#include <iostream>
#include <string>
using namespace std;
class Animals {
public :
//Default Constructor
Animals(); // : name(""), speed(0), eating("") {}
//Overload Constructor
//Animals(string theName, int theSpeed, string theEating);
Animals(string, int , string);
//Accessor Function
string getName() const ;
//getName - returns name
//@return string - name
int getSpeed() const ;
//getSpeed - returns speed
//@return string - speed
string getEating() const ;
//getEating - returns eating
//@return string - eating
//Mutator Function
void setName(string);
//setName - sets Name
void setSpeed(int );
//setSpeed - sets Speed
void setEating(string);
//setEating - sets Eating
//void setSound(string);
//setSound - sets Sound
//Destructor
~Animals();
void printInfo() const ;
//printInfo - print out name and speed
//Virtual Function
virtual void sounds()
{
cout << "Animals sounds different.\n" ;
}
private :
string name;
int speed;
string eating;
};
#endif
//Herbivores.h
#ifndef HERBIVORES_H
#define HERBIVORES_H
#include <iostream>
#include "Animals.h"
using namespace std;
class Herbivores : public Animals
{
public :
//Default constructor
Herbivores();
//Overload Constructor
Herbivores(string, int , string); //One more string?
//Accessor Function:
string getHerbs() const ;
//getHerbs - returns herbs
//@return string - herbs
//Mutator Function
void setHerbs(string);
//setName - sets Name
//Destructor
~Herbivores();
void printInfo() const ;
// printInfo - prints the properties
virtual void sounds()
{
cout << "Herbivores sounds \x22iaiaiaia\x22.\n" ;
}
private :
string herbs;
};
#endif
//main.cpp
#include "Animals.h"
#include "Herbivores.h"
#include "Carnivores.h"
using namespace std;
int main() {
Animals *a;
Herbivores h;
//a.sounds();
a->sounds();
h.setName("Rabbit" );
h.setSpeed(100);
h.setHerbs("Carrot" );
h.printInfo();
h.sounds();
a = &h; /*Address of object h in pointer variable */
a->sounds();
cout << endl;
return 0;
}
Last edited on May 18, 2015 at 10:21am UTC
May 18, 2015 at 10:11am UTC
Well, in your main() function you have declared a variable for a pointer to an Animals instance 'a' but it is currently pointing at rubbish as it hasn't been initialised:
1 2 3 4 5 6
Animals* a = new Animals();
...
delete a;
a = NULL;
May 18, 2015 at 10:51am UTC
ahh okey, now I understand! Thank you ajh32!
/ P
Topic archived. No new replies allowed.