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