A question about design of using virtual or not

T

Tony Johansson

Hello Experts!!

Here we use multiple inheritance from two classes.We have a class named
Person at the very top
and below this class we have a Student class and an Employee class at the
same level.
There is a class TeachingAssistent that use multiple inheritance from both
Student and Employee.
There is a method named getName is class Person.

Now to my question which is a question about design.

Would it be any point to define this method getName as virtual so the
derived classes could override this method which would result to a possible
use of polymorfism.

Here are all the class definitions
*********************
#include <string>
using namespace std;
class Person
{
public:
Person(string nn = "default") : name(nn) {}
string getName() const
{
return name;
}
private:
string name;
};

class Student : public virtual Person
{
public:
Student(string nn="default") : Person(nn) {}
};

class Employee : public virtual Person
{
public:
Employee(string nn="default") : Person(nn) {}
};

class TeachingAssistent : public Student, public Employee
{
public:
TeachingAssistent(string nn="default") : Person(nn) {}
};

Here is main program
****************
#include <vector>
#include "person.h"
#include <iostream>
using namespace std;

int main()
{
vector<Person *> p;
p.push_back(new Student);
p.push_back(new Employee);
p.push_back(new TeachingAssistent);

for(int i=0; i < p.size(); i++)
cout << p->getName() << endl;

return 0;
}

Many thanks

//Tony
 
V

Victor Bazarov

Tony said:
Here we use multiple inheritance from two classes.We have a class named
Person at the very top
and below this class we have a Student class and an Employee class at the
same level.
There is a class TeachingAssistent that use multiple inheritance from both
Student and Employee.
There is a method named getName is class Person.

Now to my question which is a question about design.

Would it be any point to define this method getName as virtual so the
derived classes could override this method which would result to a possible
use of polymorfism.

Yes, there might be some point to it. But there is no sense in trying to
invent a reason to use polymorphism where it's not needed.

Do not make the mistake of confusing the desire to use some fad with the
proper design. Polymorphism is good when it is called for. If it is not
needed (if your model, whatever that is, does not call for it), do not use
it just for the sake of using it.

V
 
B

Ben Pope

Tony said:
Hello Experts!!

Here we use multiple inheritance from two classes.We have a class named
Person at the very top
and below this class we have a Student class and an Employee class at the
same level.
There is a class TeachingAssistent that use multiple inheritance from both
Student and Employee.
There is a method named getName is class Person.

Now to my question which is a question about design.

Would it be any point to define this method getName as virtual so the
derived classes could override this method which would result to a possible
use of polymorfism.

The overriding does not allow you to use polymorphism. It allows you to override the GetName function if you need to change the implementation.

The problem you have is that in TeachingAssistant, you actually have two GetNames... inherited from the two Persons.

You must be careful of the diamond-shaped inheritance diagram. Consider making Person a Pure ABC.

Don't use inheritance for code-reuse, use it if you require the flexibility of polymorphism.

And read the FAQ on Multiple Inheritance:
http://www.parashift.com/c++-faq-lite/multiple-inheritance.html

Ben
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,995
Messages
2,570,230
Members
46,816
Latest member
SapanaCarpetStudio

Latest Threads

Top