Help | Site Map
Connecting Tech Pros Worldwide
 
 
LinkBack Thread Tools
  #1  
Old August 16th, 2005, 10:45 PM
Tony Johansson
Guest
 
Posts: n/a
Default A question about design of using virtual or not

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



  #2  
Old August 16th, 2005, 10:55 PM
Victor Bazarov
Guest
 
Posts: n/a
Default Re: A question about design of using virtual or not

Tony Johansson wrote:[color=blue]
> 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.[/color]

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.
[color=blue]
> [...][/color]

V
  #3  
Old August 17th, 2005, 01:05 AM
Ben Pope
Guest
 
Posts: n/a
Default Re: A question about design of using virtual or not

Tony Johansson wrote:[color=blue]
> 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.[/color]

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...
 

Bookmarks

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are Off
[IMG] code is Off
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On

What is Bytes?

We are a network of experts and professionals in IT and software development that help one another with answers to tough questions and share insights. Get the best answers to your questions from over network members.
Post your question now . . .
It's fast and it's free

Popular Articles