Polymorphism with virtual function

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
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;
ahh okey, now I understand! Thank you ajh32!

/ P
Topic archived. No new replies allowed.