By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
457,938 Members | 1,579 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 457,938 IT Pros & Developers. It's quick & easy.

A question about design of using virtual or not

P: n/a
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[i]->getName() << endl;

return 0;
}

Many thanks

//Tony

Aug 16 '05 #1
Share this Question
Share on Google+
2 Replies


P: n/a
Tony Johansson wrote:
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
Aug 16 '05 #2

P: n/a
Tony Johansson wrote:
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-lit...heritance.html

Ben
--
I'm not just a number. To many, I'm known as a String...
Aug 17 '05 #3

This discussion thread is closed

Replies have been disabled for this discussion.