2017-01-28 6 views
1

У меня проблемы с работой над моим текущим проектом. Проект состоит из взятия строк данных из файла и создания массива объектов класса, которые наследуют базовый класс.Как создать массив унаследованных объектов класса?

Итак, это то, что я понимаю, до сих пор:

class BaseClass { 
    // create empty and non-empty constructor 
} 

class SubClass : public BaseClass { 
    // create constructor specifically for this class 
} 

int main() { 
    BaseClass *array[size]; 
    array[index] = new SubClass(); 

    return 0; 
} 

Поскольку SubClass наследует BaseClass, когда я добавить новый объект в массив должен быть типа SubClass, правильно?

Когда я отлаживаю программу и смотрю на этот объект, это не позволяет мне указывать на какой-либо из методов/переменных SubClass для манипуляций, которые я должен уметь делать.

Теперь, когда я искал ответы, которые я наткнулся статического литья, поэтому я попробовал его в меру:

(static_cast<SubClass*>(array[index])->subclass_variable) = some_value 

Но это, кажется, не работает, либо любая помощь с этим было бы значительно оценили.

+0

ОК, а в чем собственно вопрос? –

+0

Как создать массив унаследованных объектов класса, в которых я могу получить доступ и манипулировать индивидуально. –

ответ

2

Один из способов справиться с этим является определяющим в интерфейс (виртуальные методы) в базовом классе и реализации в SubClass:

class BaseClass { 
    // create empty and non-empty constructor 
    virtual void f() = 0; 
} 

class SubClass : public BaseClass { 
    // create constructor specifically for this class 
    virtual void f() { std::cout << "I am your SubClass" << std::endl; } 
} 

Тогда вы можете позвонить array[index]->f();.

Другим способом является включение/тип включения класса, другое - NVI, но это несколько более сложные темы.

+0

Большое вам спасибо! Это решило его, и теперь он отлично работает, вы человек! –