As stated, I refuse to argue the matter further, why beat a dead horse? Do you really think it's a mature thing to do? Do you really believe it's mature to claim some one is acting the victim? Your hostility, name calling, and sarcasm have been completely unwarranted. Get off your high horse, recognize that I have made SOME valid points and A LOT of not so valid ones. The user above you succeeds the the fact that when deciding whether something IS-A or HAS-A is completely subjective (although usually obvious). There's no reason for you to be so obtuse. If you can't handle a mature debate, don't participate in one. It's easy to debate. Assert your opinion, provide evidence to support your opinion and provide couter points to the other's arguments. Difference of opinion != hostile intent. ^^
If you refuse to argue the matter further why are you still replying to posts ?
Looking through through the posts i only see one poster who doesn't handle a mature debate very well and who has effectivly derailed this thread.
While it is true that the distinction between "is a" and "has a" can be muddy it usually isn't.
you might get away with arguing that this is a good design
class Person {
....
}
class Developer: public Person {
....
}
While it is true that a developer is a person something like:
class Occupation {
....
}
class Developer: public Occupation {
....
}
class Person {
private:
std::vector<Occupation> occupations
......
}
would be a better option since it moves generic occupation information out of the Person class (an unemployed person doesn't need those) and you could give a person multiple occupations (By adding work hours to the Occupation base class this design would allow you to easily create for example a student who works at 7-11 on friday and saturday nights while with the inheritance approach you'd have to create a new subclass for each combination).
Basically composition is more flexible than inheritance so if you're in a position where you can choose between them the composition route is almost always better.
(One can ofcourse take it further and cut out the inheritance for the Occupation class aswell and compose the Occupation class using things like job titles, tasks, etc which would make things even more flexible)