2015-05-24 5 views
0

у меня есть проблемы с конструктором я хочу сделать что-то вроде этого:Абстрактный класс шаблона и наследование застройщик

A<int>* first = new B<int> 
A<int> *second; 

second= new B<int>(*A); 

Я пытался использовать в списке аргументов указателя, ссылки и значение и ничего работы, и я не могу сказать, почему. Это мой не работает конструктор:

template <class T> 
B<T>::B(B<T> other) 

он работает с const A<T>& спасибо, Еще одна вещь, если я могу. Я должен получить доступ в этом конструкторе к полям частного класса класса B. И если у меня есть только другой класс A. Могу ли я сделать это в некоторых других случаях?

+0

Как являются 'A ' и 'B ' связанные? – Christophe

+0

Этот код не компилируется. – Sneftel

+0

Класс является базовым классом B. Это общедоступное наследование – Hangoverflow

ответ

1

Предполагая, что B<T> наследует A<T>, как вы описали в комментариях, вы пытаетесь downcast, когда вы пишете new B<int>(some_value_of_type_A);

Вы должны предоставить конструктор, который принимает тип A<T>, как это:

template<class T> 
B<T>::B(const A<T>& other); 
+0

Да, и 'second = new B (* A);' ничего не значит, потому что A - это тип, а не объект ... – Christophe

+0

Он начал работать, спасибо. Еще одна вещь, если я могу. Я должен получить доступ в этом конструкторе к полям частного класса класса B. И если у меня есть только другой класс A. Могу ли я сделать это в некоторых других случаях? – Hangoverflow

+0

@Hangoverflow Вы не знаете, действительно ли 'A other' действительно имеет действительный' B 'во время выполнения. Чтобы узнать, действительно ли это, вы можете использовать RTTI, google. –

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