virtual-ные функции
От: Аноним  
Дата: 05.11.04 10:48
Оценка:
Скажите если в базовом классе функция обьявлена как virtual, а в производных нет, то будет ли она виртуальной в производных, и вообще чем это будет отличаться от того, когда функция так же обьявлена как виртуальная в производном классе. Спасибо.
Re: virtual-ные функции
От: _nn_ www.nemerleweb.com
Дата: 05.11.04 10:52
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Скажите если в базовом классе функция обьявлена как 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 !!!
}
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: virtual-ные функции
От: Bell Россия  
Дата: 05.11.04 10:53
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Скажите если в базовом классе функция обьявлена как virtual, а в производных нет, то будет ли она виртуальной в производных,


Будет.

А>и вообще чем это будет отличаться от того, когда функция так же обьявлена как виртуальная в производном классе.

Наглядностью.
Любите книгу — источник знаний (с) М.Горький
Re[2]: virtual-ные функции
От: Аноним  
Дата: 05.11.04 10:56
Оценка:
Разница между виртуальными и не виртуальными функциями мне понятна. Вопрос в том, что допустим имеем базовый класс с виртуальной функцией Foo, и два класса Derived1 и Derived2. В Derived1 функция Foo обьявлена как виртуальная, а в Derived2 нет. Вот вопрос в том какая разница будет в поведении Derived1 и Derived2. И что будет если от Derived1 и Derived2 потом унаследуются ещё классы...
Re[3]: virtual-ные функции
От: LaptevVV Россия  
Дата: 05.11.04 11:04
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Разница между виртуальными и не виртуальными функциями мне понятна. Вопрос в том, что допустим имеем базовый класс с виртуальной функцией Foo, и два класса Derived1 и Derived2. В Derived1 функция Foo обьявлена как виртуальная, а в Derived2 нет. Вот вопрос в том какая разница будет в поведении Derived1 и Derived2. И что будет если от Derived1 и Derived2 потом унаследуются ещё классы...

Один раз объявленная функция — виртуальна до скончания века, то есть наследования.
Лучше. конечно, всегда писать явным образом.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.