2015-02-17 2 views
0

я следующую иерархию классаКак переопределить тип элемента базового класса?

class Boy : Child 
class Girl : Child 

class Parent 
{ 
vector<Child> children; 
} 
class Anna : Parent 

Но я знаю, что перед компиляцией, что Анна всегда будет только иметь мальчиков, поэтому вместо того, чтобы использовать только интерфейс потомок родителю, я хотел бы Анну, чтобы иметь возможность доступа Мальчики также будут лучше для своих детей! Есть ли способ моделировать, не заставляя литье?

class Anna : public Parent 
{ 
vector<Boys> children; //Here i just Hide the base class member 
} 

Спасибо.

+0

У вас есть несколько экземпляров класса «Анна», или, возможно, Анна будет примером «Родитель»? Кроме того, должен ли человек быть ребенком и родителем в вашей модели? – Simon

+0

Да, у меня будет несколько экземпляров Анны и да, человек должен быть родителем и ребенком. – user2164703

ответ

1

Вы не можете сделать член изменения базового класса это типа в зависимости от производного типа. Однако вы можете создать класс шаблона с зависимым членом и иметь производные классы, наследующие базу нужного типа.

Если вы хотите, чтобы производные классы имели общую базу, вы можете наследовать базовый шаблон из класса.

class BaseParent {}; 
template<class T> 
class Parent: public BaseParent { 
    vector<T> children; 
}; 
class Anna: public Parent<Boy> {}; 
+0

Я попробую и дам вам знать – user2164703

0

Вы могли бы попробовать что-то вдоль линий этого

template <typename C> class Parent 
{ 
    vector<C> children; 
}; 

class Anna : public Parent<Boy> 
{ 

}; 
Смежные вопросы