2017-01-24 17 views
0

Представьте меня есть класс A. B & C и унаследовать от A. B»наследуется из B.C++ Вызов функции ребенка на вектор родительских объектов

B» имеет переменную-член, который является вектором указателей . Я создаю новый B "под названием bP и сохранил новый C внутри, называемый c. Теперь я хочу позвонить c.f(), функции, которая существует только для типа C. Я звоню bP[0]->f(). Ошибка, которую я получаю, это «f(): не является членом« A ». Можно ли вызвать дочернюю функцию из вектора родительских объектов?

+1

Предоставьте [mcve]; таким образом нам не нужно «воображать», мы можем посмотреть на фактический код. –

+0

Если указатель указывает на дочерний объект, да. Вы можете просто сделать static_cast (bP [0]) -> f'. Но, пожалуйста, попробуйте включить код в следующий раз, это будет намного легче понять, что вы пытаетесь сделать. – George

+0

что такое B '' ?? укажите код – instance

ответ

0
I believe your code structure is something like this : 

class A 
{ 
}; 

class B: public A 
{ 
}; 

class C: public A 
{ 
}; 

class B': public B 
{ 
    public: 
      vector<A*> vec; 
      B(class C* c) 
      { 
       vec.push_back(c); 
      } 
}; 

int main() 
{ 
    C *c = new C(); 
    B'* b = B'(c); 
    C* c = static_cast<C*>(((b->vec).front())->f()); //Downcasting 
    return; 
}