Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C++ > A question about design of using virtual or not

Reply
Thread Tools

A question about design of using virtual or not

 
 
Tony Johansson
Guest
Posts: n/a
 
      08-16-2005
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



 
Reply With Quote
 
 
 
 
Victor Bazarov
Guest
Posts: n/a
 
      08-16-2005
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
 
Reply With Quote
 
 
 
 
Ben Pope
Guest
Posts: n/a
 
      08-16-2005
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...
 
Reply With Quote
 
 
 
Reply

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 On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
class design/ design pattern question Bartholomew Simpson C++ 2 06-12-2007 08:51 PM
non-virtual call to a virtual function using pointer to member archimed7592 C++ 4 05-30-2007 08:59 PM
If declared as virtual in base, its derived version also is virtual. Why not for destructors? qazmlp C++ 7 07-27-2004 03:10 PM
OO design in servlet design question dave Java 5 07-17-2004 12:58 PM
Should 'public virtual' always become 'private virtual'? & using private inheritance qazmlp C++ 19 02-04-2004 12:37 AM



Advertisments