Polymorphism

Last weeks assignment was to show inheritance with a person and student class. This weeks assignment is to show polymorphism from the previous weeks assignment. I plan on adding the TA teachers assistant to the code, but getting errors. Obviously some problems but not sure where to start.


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
146
147
148
149
150
151
152
153
154
155
156
157
#include <iostream>
#include <vector>
#include <string>

using namespace std;

class Person
{

	public:
		
	string lastName;		//data member
	string firstName;		//data member
	string middleName;		//data member
	string Address;
	string City;
	string State;
	int Zip;
	int Phone;
		
	Person()
	{
		lastName = "Smith";
		firstName = "Sam";
		middleName = "Steve";
		Address = "2586 Billy Bob Ln";
		City = "Tuscaloosa";
		State = "AL";
		Zip = 26549;
		Phone = 2136546578;		
		
	}
	Person(string lastName, string firstName, string middleName, string Address, string City, string State, int Zip, int Phone)
	{
		this->lastName = lastName;
		this->firstName = firstName;
		this->middleName = middleName;
		this->Address = Address;
		this->City = City;
		this->State = State;
		this->Zip = Zip;
		this->Phone = Phone;
		
	}
	void Display()
	{
		cout << "This is your Persons information. "  << endl;
		cout << " Last name is " << lastName << endl;
		cout << " First name is " << firstName << endl;
		cout << " Middle initial is " << middleName << endl;
		cout << " Address is " << Address << endl;
		cout << " City is  " << City << endl;
		cout << " State is  " << State << endl;
		cout << " Zip is  " << Zip << endl;
		cout << " Phone is  " << Phone << endl;
	};
};
	
	class Student: public Person
	{
	
	public:
		string currentGrade;	//data member
		string Course;			//data member
		double GPA;				//data member
		void virtual teachersAssistant();
		
	Student()	
		{
			currentGrade = "A-";
			Course = "Chemistry";
			GPA = 2.9;
		}
	
	Student(string lastName, string firstName, string middleName, string Address, string City, string State, int Zip, int Phone, string currentGrade, string Course, double GPA)
	{
		this->lastName = lastName;
		this->firstName = firstName;
		this->middleName = middleName;
		this->Address = Address;
		this->City = City;
		this->State = State;
		this->Zip = Zip;
		this->Phone = Phone;
		this->currentGrade = currentGrade;
		this->Course = Course;
		this->GPA = GPA;
	};
		void Display()
	{
		cout << "This is your Persons information. "  << endl;
		cout << " Last name is " << lastName << endl;
		cout << " First name is " << firstName << endl;
		cout << " Middle initial is " << middleName << endl;
		cout << " Current grade is " << currentGrade << endl;
		cout << " Current course is " << Course << endl;
		cout << " The students current GPA is " << GPA << endl;
	};
	
	Person *pTA = new Student()
	
	{
		lastName = "Jones";
		firstName = "Johnny";
		middleName = "Jimbob";
		Address = "235 Leisure Suit Larry Ln";
		City = "Tuscaloosa";
		State = "AL";
		Zip = 26549;
		Phone = 2136459831;	
		currentGrade = "C+";
		Course = "Calculus II";
		GPA = 2.3;
	}
	
	TA(Student(string lastName, string firstName, string middleName, string Address, string City, string State, int Zip, int Phone, string currentGrade, string Course, double GPA)
		{
		this->lastName = lastName;
		this->firstName = firstName;
		this->middleName = middleName;
		this->Address = Address;
		this->City = City;
		this->State = State;
		this->Zip = Zip;
		this->Phone = Phone;
		this->currentGrade = currentGrade;
		this->Course = Course;
		this->GPA = GPA;
	};
		void Display()
	{
		cout << "This is your Persons information. "  << endl;
		cout << " Last name is " << lastName << endl;
		cout << " First name is " << firstName << endl;
		cout << " Middle initial is " << middleName << endl;
		cout << " Current grade is " << currentGrade << endl;
		cout << " Current course is " << Course << endl;
		cout << " The students current GPA is " << GPA << endl;
	};

};
	


int main()
{
	
	Person person;
	Student student;
	TA ta;
	
	person.Display();
	student.Display();
	ta.Display();
	
	return 0;
}
Where have you defined a TA object? And what are the random semicolons for?
1
2
Student(string lastName, string firstName, string middleName, string Address, string City, string State, int Zip, int Phone, string currentGrade, string Course, double GPA)
	

1
2
TA(Student(string lastName, string firstName, string middleName, string Address, string City, string State, int Zip, int Phone, string currentGrade, string Course, double GPA)
		

1
2
void Display()
	

1.why semicolons here?
2.And what is TA?
3.Even I dont get this -
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
	Person *pTA = new Student()
	
	{
		lastName = "Jones";
		firstName = "Johnny";
		middleName = "Jimbob";
		Address = "235 Leisure Suit Larry Ln";
		City = "Tuscaloosa";
		State = "AL";
		Zip = 26549;
		Phone = 2136459831;	
		currentGrade = "C+";
		Course = "Calculus II";
		GPA = 2.3;
	}
Last edited on
You said that you have had inheritance. That you have struct Person and struct Student which IS-A Person. Based on your code, you don't make efficient use of inheritance.

Did you learn about virtual member functions? They are an essential component in polymorphism.

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
class Foo {
  virtual void p_show() const
  {
    std::cout << "foo";
  }
public:
  void show() const
  {
    p_show();
  }
};

class Bar : public Foo
{
public:
  virtual void p_show() const
  {
    std::cout << "bar";
  }
};

int main()
{
  Foo * Ann = new Foo;
  Foo * Bob = new Bar;

  Bob->show();
  std::cout << '\n';
  Ann->show();
  std::cout << '\n';

  return 0;
}
Topic archived. No new replies allowed.