Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Виртуальные методы? Необходимо подробно расшифровать... 
:(
    Опции темы
Grol
Дата 4.6.2006, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 5.5.2005
Где: Россия

Репутация: нет
Всего: нет



Добрый день. Необходимо ответить на вопросы по ООП:
 1. Что такое Виртуальные функции? Для чего они нужны и где применяются?
 2. Что такое Виртуальные деструкторы? Также для чего они нужны и где применяются? Можно напримере не виртуальных деструкторов.
 3. Почему не бывает виртуальных конструкторов (а если бывают точто это такое)?

Всем спасибо заранее за ответы, но небольшая просьба: Пожалуйста отвечайте на вопросы только на те на которые точно знаете ответ. То есть, чтоб не было такого -> "наверное это все таки.....или еще что-то".  

Это сообщение отредактировал(а) Grol - 4.6.2006, 11:56
--------------------
Живи так, как будто тебе предстоит умереть завтра...Учись так, как будто тебе предстоит жить вечно.........
PM MAIL ICQ   Вверх
bel_nikita
Дата 4.6.2006, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



Круто!
Возьми книгу Г.Шилда, там все очень хорошо и подробно описано. 


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
Fazil6
Дата 4.6.2006, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



Цитата

1. Что такое Виртуальные функции? Для чего они нужны и где применяются?

Код

class A
{
public:
        void f1() {std::cout << "A::f1()\n" ;};
        virtual void f2() {std::cout << "A::f2()\n" ;};
};
class B  : public A
{
public 
        void f1() {std::cout << "B::f1()\n" ;};
        virtual void f2() {std::cout << "B::f2()\n" ;};
};

....

A *a;  // может быть указателем на А или его потомка
a = new B();  
a->f1();  // вызовется ф-я A::f1
a->f2();  // вызовется B::f2 потому, что это виртуальная, т.е. этот механизм позволяет вызывать
             //    функции не того класса, который объявлен (А), а того, на который этот указатель 
              // действительно указывает (В) 



Добавлено @ 12:57 
Цитата

 2. Что такое Виртуальные деструкторы? Также для чего они нужны и где применяются? Можно напримере не виртуальных деструкторов.

это деструктор, объявленный с словом virtual. Необходимо это для того же, для чего и другие виртуальные функции, чтобы в нужный момент вызвался деструктор того объекта, который удаляется
Код

A *a;  // может быть указателем на А или его потомка    
a = new B(); 

delete a;  // если деструктор А не объявлен виртуальным, то в этом месте вызовется именно он, но мы
                //  ведь создавали объект B и должен вызваться деструктор B (для этого делаем деструкторы
                //  виртуальными)  
 
PM MAIL   Вверх
Fazil6
Дата 4.6.2006, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



Цитата

3. Почему не бывает виртуальных конструкторов (а если бывают точто это такое)?

более того в конструкторах виртуальный механизм вообще не действует. Дело в том, что вызов виртуального метода предполагает вызов метода потомка, но если мы вызываем виртуальный метод в конструкторе родителя, к этому моменту еще не вызывался конструктор потомка и члены-данные потомка проинициализированы не могут быть и поэтому вызов метода из  потомка в этот момент не может быть осуществлен.
А виртуальность применительно конструкторов вообще не имеет смысла., потому, что при создании объекта по очереди вызываются все конструкторы по иерархии и выбора что вызывать(как в случае виртуальных ф-й) здесь просто нет   
PM MAIL   Вверх
Grol
Дата 4.6.2006, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 5.5.2005
Где: Россия

Репутация: нет
Всего: нет



bel_nikita - а есть электронная книга этого автора?
Fazil6 - спасибо попробую разобраться. 
--------------------
Живи так, как будто тебе предстоит умереть завтра...Учись так, как будто тебе предстоит жить вечно.........
PM MAIL ICQ   Вверх
DeadSoul
Дата 4.6.2006, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1217
Регистрация: 25.9.2005
Где: Москва

Репутация: 2
Всего: 11



Цитата(Grol @  4.6.2006,  15:00 Найти цитируемый пост)
bel_nikita - а есть электронная книга этого автора?

А поиском по форуму пользовались? 


--------------------
 Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". 

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
Xenon
Дата 4.6.2006, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 11
Всего: 50



В разделе "книги" 


--------------------
user posted image  
PM MAIL   Вверх
MAKCim
Дата 4.6.2006, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата

Почему не бывает виртуальных конструкторов (а если бывают точто это такое)

Язык C++ - статически типизован
При создании объекта его тип точно должен быть известен, потому тут и невозможны в принципе виртуальные механизмы 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0561 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.