Re: Вызов метода дочернего класса из указателя на базовый
От: MaximE Великобритания  
Дата: 16.11.03 16:44
Оценка:
gde11 wrote:

g> subj — как? Например, в таком коде:

g> class Base{
g> ...
g> };
g> class Child:public Base{
g> void f(){cout<<"Base";}
g> };
g> ...
g> Base * p = new Child;
g> p->f();

g> При этом, вообще говоря, я точно не знаю, что запишется в p — Child или Base (через p = new Base. Во втором случае, разумеется, f вызывать не надо.


Можно сделать функцию f() виртуальной.

struct Base
{
    virtual void f() { /* ничего здесь не делаем */ }
};

struct Child : Base 
{
    virtual void f() { cout << "Child"; }
};

// ...
Base* p1 = new Base;
Base* p2 = new Child;

p1->f(); // вызов Base::f
p2->f(); // вызов Child::f


g> Могу ли я вообще выяснить, что в указателе p у меня сидит — Child или Base?


Можешь при помощи dynamic_cast<> (при преобразовании к указателю вернет 0, если Base не является на самом деле Child):

if(Child* с = dynamic_cast<Child*>(p))
    c->f();
Posted via RSDN NNTP Server 1.8 beta
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.