Скажите если в базовом классе функция обьявлена как virtual, а в производных нет, то будет ли она виртуальной в производных, и вообще чем это будет отличаться от того, когда функция так же обьявлена как виртуальная в производном классе. Спасибо.
Здравствуйте, Аноним, Вы писали:
А>Скажите если в базовом классе функция обьявлена как virtual, а в производных нет, то будет ли она виртуальной в производных, и вообще чем это будет отличаться от того, когда функция так же обьявлена как виртуальная в производном классе. Спасибо.
Да, виртуальность сохраняется в производных классах.
Разница :
#include <iostream>
using namespace std;
class Base
{
public:
virtual void virtual_f() { cout<<"Base::virtual_f\n"; }
void non_virtual_f() { cout<<"Base::non_virtual_f\n"; }
};
class Derive : public Base
{
public:
virtual void virtual_f() { cout<<"Derive::virtual_f\n"; } // слово virtual можно не писатьvoid non_virtual_f() { cout<<"Derive::non_virtual_f\n"; }
};
int main()
{
// вызов из базового класса
Base b;
b,non_virtual_f(); // Base::non_virtual_f
b.virtual_f(); // Base::virtual_f
// вызов из производного класса
Derive d;
d,non_virtual_f(); // Derive::non_virtual_f
d.virtual_f(); // Derive::virtual_f
// вызов через указатель базового класса на производный класс
Base* pBase = &d;
pBase->non_virtual_f(); // Base::non_virtual_f
pBase->virtual_f(); // Derive::virtual_f !!!
}
Здравствуйте, Аноним, Вы писали:
А>Скажите если в базовом классе функция обьявлена как virtual, а в производных нет, то будет ли она виртуальной в производных,
Будет.
А>и вообще чем это будет отличаться от того, когда функция так же обьявлена как виртуальная в производном классе.
Наглядностью.
Любите книгу — источник знаний (с) М.Горький
Re[2]: virtual-ные функции
От:
Аноним
Дата:
05.11.04 10:56
Оценка:
Разница между виртуальными и не виртуальными функциями мне понятна. Вопрос в том, что допустим имеем базовый класс с виртуальной функцией Foo, и два класса Derived1 и Derived2. В Derived1 функция Foo обьявлена как виртуальная, а в Derived2 нет. Вот вопрос в том какая разница будет в поведении Derived1 и Derived2. И что будет если от Derived1 и Derived2 потом унаследуются ещё классы...
Здравствуйте, Аноним, Вы писали:
А>Разница между виртуальными и не виртуальными функциями мне понятна. Вопрос в том, что допустим имеем базовый класс с виртуальной функцией Foo, и два класса Derived1 и Derived2. В Derived1 функция Foo обьявлена как виртуальная, а в Derived2 нет. Вот вопрос в том какая разница будет в поведении Derived1 и Derived2. И что будет если от Derived1 и Derived2 потом унаследуются ещё классы...
Один раз объявленная функция — виртуальна до скончания века, то есть наследования.
Лучше. конечно, всегда писать явным образом.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!