Регистрация   Вход   Поиск   FAQ

Автор Сообщение
 Re:
 Сообщение  30-май-2009 19-14
Аватара пользователя Stonepick
Что такое виртуальная функция в C++





 Re:
 Сообщение  31-май-2009 23-01
Аватара пользователя Tygrargas
сматри рассмотрим на примере C++.NET потребуется для рассмотрения класс System::Windows::Forms::Form
этот класс содержит виртуальную функцию OnPaint(PaintEventArgs *args)
так вот ты создаешь класс порожденный из класса Form и те надо чтоб при разрушении экрана происходила его перерисовка для того есть стандартная функция онпаит ты ее в своем классе переопределяешь
public: virtual void OnPaint(PaintEventArgs *argx)
{
}
и в твоем классе вместо функции описанной в классе Form будет исполняться твоя функция онпаит)
ваще виртуальные функции решают проблему полиморфизма, позволяя объектам, созданным из иерархических взаимосвязанных классов, просто использовать одноименные функции с одинаковыми параметрами и типом возвращаемого значения





 Re:
 Сообщение  2-июн-2009 02-48
Аватара пользователя Bludmaster
Создать абстрактный класс с виртуальной функцией: норма





 Re:
 Сообщение  3-июн-2009 06-34
Аватара пользователя Umgrinn
А ты попробуй зайти через поиск, набери все что тебе нужно и ты получишь на все , мне когда надо что то узнать я нажимаю поиск и все супер.
Удачи тебе узнать обо всем....
Успеха , счастья и полный Вам парус !
Чистого неба над головой !
Пусть солнце сияет и птицы щебечут
Прямою дорогой за своею звездой !


 Re:
 Сообщение  4-июн-2009 10-21
Аватара пользователя Frostweaver
как реализовать чисто виртуальную функцию(синтаксис)


 Re:
 Сообщение  5-июн-2009 14-08
Аватара пользователя Thori
class A
{
public:
virtual void foo() = 0; // Чисто виртуальная функция. Её реализация для данного класса не нужна ( надо написать = 0)
}
Класс с чисто виртуалной функцией, называется абстрактным, и от него нельзя создать объектов.
Теперь с наследованием:
class B:public A
{
virtual void foo(); .// ну собсна объявляем функцию. Слово virtual здесь не обязательно, обо она обявлена виртуальной в базовом классе. Но указание virtual для потомков, считается хорошим тоном программирования. Если не написать реализацию, то класс будет абстрактным
}
ну и реализация функции для потомка
void B:foo()
{
}
Пробуем использовать:
A* a = new A() // не скомпилируется, ибо нельзя создавать объект от абстрактног класса (есть чисто виртуальная функция)
B* b = new B(); // всё путём, у нас есть реализация функции. Если забыл написать реализацию этой функции не скомпилиться
b->foo(); // вызоветься B::foo();
Но есть такая штука:
(A*)b->foo(); // если скомпилица, то приведёт к краху =)





 Re:
 Сообщение  6-июн-2009 17-54
Аватара пользователя Thunderpick
для чего в этой проге используются чистые виртуальные функции(контроллер видеомагнитофона)?


 Re:
 Сообщение  7-июн-2009 21-41
Аватара пользователя Delazan
Ну они просто определяют интерфейс, а так читайте про ООП


 Re:
 Сообщение  9-июн-2009 01-28
Аватара пользователя Spellredeemer
Не "Чисто виртуальные", а абстрактные. Они реализуются в потомках, читать теорию ООП до посинения.


 Re:
 Сообщение  10-июн-2009 05-14
Аватара пользователя Perimeena
Объясните отличия виртуальных функций от чисто виртуальных


 Re:
 Сообщение  11-июн-2009 09-01
Аватара пользователя Goldenwood
Чисто виртуальная функция тела не имеет. Она просто резервирует свое имя, чтобы быть в дальнейшем переопределенной. Зато благодаря этому к ней можно обращаться в базовом классе, он просто передаст вызов соствующему потомку.


 Re:
 Сообщение  12-июн-2009 12-48
Аватара пользователя Anaundefined
для чего нужны виртуальные функции в C+/+?


 Re:
 Сообщение  13-июн-2009 16-34
Аватара пользователя Blooddragon
Наверное для экспериментов..(ИМХО)))))))


 Re:
 Сообщение  14-июн-2009 20-21
Аватара пользователя Bunadar
На википедии вполне приличная статья на эту тему
http://ru.wikipedia.org/wiki/Виртуальный...
Общая суть - в том, если у тебя класс Б наследует у класс А, и есть указатель типа А*, который указывает на объект класса Б, то при обращении к функции, если она виртуальна - то ты выполнится функция класса Б, а иначе - функция класса А.


 Re:
 Сообщение  16-июн-2009 00-08
Аватара пользователя Whiteeye
Для полиморфизма. Один интерфейс -- множество методов.


 Re:
 Сообщение  17-июн-2009 03-54
Аватара пользователя Burigrinn
Современные программы могут насчитывать десятки тысяч классов,которые связаны между собой наследованием.Например,в каждой есть ф-ция void Show() ,которая выводит на экран информацию о классе при каком то событии.Как ты выберешь нужную?Напишешь 30000 раз if-else?Вот для такой ситуации и пригодится механизм виртуальных ф-ций.В базовом классе определяется ,что ф-ция Show() виртуальная.Для каждого наследуемого класса пишется её реализация.Теперь в программе можно вызвать ф-цию через указатель или по ссылке на базовый класс.Не нужны указатели на каждый производный класс.В момент выполнения,программа сама определяет,какую версию ф-ции вызвать.
void FuncAllShow(Base &ob)
{
ob.Show();
}
Теперь в процессе выполнения программы ссылку на какой бы мы класс не передали,вызовется Show() этого класса.Если для класса не переоределена ф-ция ,то вызовется реализация для базового класса.(Если ф-ция не чисто виртуальная).


 Re:
 Сообщение  18-июн-2009 07-41
Аватара пользователя Blackblade
Виртуальные функции на физическом уровне


 Re:
 Сообщение  19-июн-2009 11-28
Аватара пользователя Aragar
Ликбез


 Re:
 Сообщение  20-июн-2009 15-14
Аватара пользователя Flamewind
Каков механизм поиска виртуальной функции в C++?)


 Re:
 Сообщение  21-июн-2009 19-01
Аватара пользователя Ishntus
http://www.google.ru/search?hl=ru&newwindow=1&q=механизм+поиска+виртуальной+функции+в+C++?)&btnG=Поиск&lr=&aq=f&oq=


 Re:
 Сообщение  22-июн-2009 22-48
Аватара пользователя Ironhunter
Каке вы знаете коренные отличия "Виртуальные функции" от обычной? В Delphi


 Re:
 Сообщение  24-июн-2009 02-34
Аватара пользователя Zaundefined
Тем, что их можно переопределить: назначить свою функцию на место виртуальной.


 Re:
 Сообщение  25-июн-2009 06-21
Аватара пользователя Whitebrand
при компиляции виртуальных функций используется позднее связывание, у обычной - раннее. Позднее связывание это вызов функций через Таблицу Виртуальных Методов, на которую в каждом классе, содержащего хотя бы одну виртуальную функцию, есть указатель. Такой ход является важной частью полиморфизма, тк позволяет пользоваться классами потомками как классом родителя, вызывая при этом замещенные методы классов потомков. При вызове обычной функции генерируется прямой прыжок к подпрограмме.


 Re:
 Сообщение  26-июн-2009 10-08
Аватара пользователя Ninin
Что такое чисто виртуальная функция?


 Re:
 Сообщение  27-июн-2009 13-54
Аватара пользователя Truecaster
POSMOTRI V FAYLE POMOSHI , A TO MNE NEOHOTA


 Re:
 Сообщение  28-июн-2009 17-41
Аватара пользователя Mabor
Это понятие имеет смысл в С++, но никик не в С.
Когда в виртуальной функции базового класса отсутствует значимое действие, в любом классе, производном от этого базового, такая функция обязательно должна быть переопределена. Для реализации этого положения в С++ поддерживаются так называемые чистые виртуальные функции. Они не определяются в базовом классе. Туда включаются только прототипы этих функций. Для чистой виртуальной функции используется такая основная форма:
virtual () = 0;


 Re:
 Сообщение  29-июн-2009 21-28
Аватара пользователя Lightfire
Скажите пожалуйста в чём разница между виртуальной функцией, и виртуальным наследованием?


 Re:
 Сообщение  1-июл-2009 01-14
Аватара пользователя Beantrius
Это относится к обьектноориентированному программированияю или ч чему то другому?
острожно, в голове злые собаки


 Re:
 Сообщение  2-июл-2009 05-01
Аватара пользователя Wrathworker
кто мне расскажет про виртуальные функции,их устройство и принципы в ООП на С++?(+желательно ссылки)


 Re:
 Сообщение  3-июл-2009 08-48
Аватара пользователя Landaron
http://www.citforum.ru/programming/cpp_m...
http://www.rsdn.ru/forum/cpp/2184147.1.a...
вот пара ссылок по теме. Надеюсь поможет.


 Re:
 Сообщение  4-июл-2009 12-34
Аватара пользователя Gravelcaster
спасибо.посмотрю)


 Re:
 Сообщение  5-июл-2009 16-21
Аватара пользователя Butius
http://ru.wikibooks.org/wiki/QT
Qt - кроссплатформенная библиотека разработки GUI на С++ =P


 Re:
 Сообщение  6-июл-2009 20-08
Аватара пользователя Frostpick
вопрос по С++. Что такое виртуальная функция, где-как-и зачем её использовать?


 Re:
 Сообщение  7-июл-2009 23-54
Аватара пользователя Anararin
Чтобы понять зачем необходимы виртуальные функции, необходимо понимать что такое наследование и полиморфизм.
Указателю на базовый класс может быть присвоен адрес объекта этого класса или любого производного класса.
Теперь представьте: производный класс наследует все методы родительского класса и при этом может изменять и дополнять методы, оставляя им те же самые имена.
Рассмотрим пример.
class sphera
{
void print()
{
cout <<"sphera\n";
}
};
class ball:public sphera
{
void print()
{
cout <<"ball\n";
}
};
int main()
{
ball b;
sphera *ps=&b;
ps->print();
}
Вопрос на засыпку :-)) как думаешь, что ты увидишь на экране?
Это называется механизмом раннего связывания - ссылка на функцию разрешается на этапе компиляции.
Что бы избежать этого функция в родительском классе должна стать виртуальной (методы потомков автоматически становятся виртуальными), что бы реализовался механизм так называемого позднего связывания - ссылки функции разрешаются на этапе выполнения программы.
При этом указатель будет обращать к методу того класса, адрес которого он хранит.





 Re:
 Сообщение  9-июл-2009 03-41
Аватара пользователя Stonesmasher
подскажите чем виртуальная функция отличается от обычной функции


 Re:
 Сообщение  10-июл-2009 07-28
Аватара пользователя Naswyn
наверное тем что виртуальная принадлежит классу а простая и без класса может быть (хотя я точно не помню)


 Re:
 Сообщение  11-июл-2009 11-14
Аватара пользователя Steelweaver
Виртуальные и динамические методы не связаны с другими методами с тем
же именем в классах — наследниках. Если в классах — наследниках эти методы
перегружены, то при обращении к такому методу во время выполнения будет вы-
зываться тот из методов с одинаковыми именами, который соствует классу
объекта, указанному при вызове. Например, если имеется базовый класс графиче
ских объектов TShape и ряд наследующих ему классов различных геометрических
фигур, и если в каждом из этих классов определен свой виртуальный метод Draw,
рисующий эту фигуру, то можно написать в программе:
var ShapeSrray: array[1..10] of TShape;
for i:=l to 10 do ShapeArray.Draw;
В этом коде в массив ShapeArray могут помещаться объекты разных классов,
наследующих TShape. В цикле for обращение к объектам производится как к объ-
ектам базового для них типа TShape. В этом случае для каждого объекта будет вы-
зываться виртуальный метод Draw именно этого объекта. Такой подход, облегчаю-
щий работу с множеством родственных объектов, называется полиморфизмом.
При объявлении в классе виртуальных и динамических методов после точки
с запятой, завершающей объявление метода, добавляются ключевые слова virtual
или dynamic. Например:
type
TShape = class
procedure Draw; virtual ;
end;
....
А вот ещё , если непонятно:
http://ru.wikipedia.org/wiki/Виртуальный...
Архангельский - программирование в Delphi






 Re:
 Сообщение  12-июл-2009 15-01
Аватара пользователя Tenis
Если под "обычной функцией" имеется в виду функция-член класса, то различие в следующем:
- виртуальная функция может быть переопределена в классе-наследнике, при вызове функции объектом этого класса-наследника будет вызвана именно эта переопределенная функция (если она не переопределена, то вызывается функция базового класса)
- функция, не объявленная как виртуальная, не может быть переопределена в классе-наследнике. Даже если ее там переопределить, при вызове все равно будет вызываться функция базового класса.


Вернуться наверх 
 Профиль  
 

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1