Что означает virtual при объявлении функции внутри класса?
Как я понимаю, при помощи слова virtual обеспечивается полиморфизм--способность программы во время своего исполнения определять, как какому классу относится функция с определённым именем.
Но хотелось бы узнать поподробнее об этом ключевом слове.
Чем отличается конструкция
class MyClass1
{
// данные класса MyClass1;
MyClass1(); // конструктор
~MyClass1(); // деструкторint MyFunc1(int a, inb b);
// прочие методы класса MyCLass1;
};
class MyClass2 : public MyClass1
{
// данные класса MyCLass2;
MyClass2(); // конструктор
~MyClass2(); // деструктор;int MyFunc1(int a, int b);
// прочие методы класса MyClass2;
};
от конструкции
class MyClass1
{
// данные класса MyClass1;
MyClass1(); // конструктор
~MyClass1(); // деструкторvirtual int MyFunc1(int a, inb b);
// прочие методы класса MyCLass1;
};
class MyClass2 : public MyClass1
{
// данные класса MyCLass2;
MyClass2(); // конструктор
~MyClass2(); // деструктор;virtual int MyFunc1(int a, int b);
// прочие методы класса MyClass2;
};
?
1613 г. = 2024 г.
Re[3]: Что означает virtual при объявлении функции внутри класса?
Здравствуйте, Pavel Dvorkin, Вы писали:
RF>>Что означает virtual при объявлении функции внутри класса?
PD>Означает необходимость изучения языка прежде, чем приступать к написанию кода.
Я так понимаю, товарищ, после долгих лет в политике и прочих подобных форумах, решил на C++ список развернуть
Здравствуйте, Pavel Dvorkin, Вы писали: PD>Здравствуйте, Carc, Вы писали: C>>Сам хотел что-то подобное ответить… но вспомнил себя в далеком 96-97ом со Сваном в обнимку, и подобрел PD>Я понимаю, но всему предел есть. PD>Вот сюда посмотри. PD>http://rsdn.org/forum/mfc/
Скрытый текст
Твою жешь мать...
Один плюс, раздел ожил немного
Sic luceat lux!
Re[7]: Что означает virtual при объявлении функции внутри класса?
Здравствуйте, Evgeniy Skvortsov, Вы писали:
ES>Это мой косяк. Когда я задолбался отвечать в WINAPI, посоветовал ТС взять какой-нибудь фреймворк типа MFC или WTL. ES>В MFC отвечать стало несколько проще, но надо было советовать Delphi, там почти всё о чём спрашивается — делается в несколько кликов мышки. ES>
В MFC ненамного сложнее, чем в Delphi. Как человек, знакомый с Delphi, JBuilder, Borland C++Builder, Visual C# и теперь с MFC говорю.
1613 г. = 2024 г.
Re[6]: Что означает virtual при объявлении функции внутри класса?
Здравствуйте, AlexGin, Вы писали:
AG>Жирный минус — раздел ожил за счёт детских вопросов, которые гуглятся на пол-раза. AG>P.S. С такими простыми вопросами — правильнее было бы начинать, например с .NET и C# — там всё это проще, нежели в MFC.
Здравствуйте, AlexGin, Вы писали:
AG>P.S. С такими простыми вопросами — правильнее было бы начинать, например с .NET и C# — там всё это проще, нежели в MFC.
Это мой косяк. Когда я задолбался отвечать в WINAPI, посоветовал ТС взять какой-нибудь фреймворк типа MFC или WTL.
В MFC отвечать стало несколько проще, но надо было советовать Delphi, там почти всё о чём спрашивается — делается в несколько кликов мышки.
Re[4]: Что означает virtual при объявлении функции внутри класса?
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Я понимаю, но всему предел есть.
+100500
Этот товарищ, что спрашивал насчёт virtual, захламил и затроллил всё по MFC и WINAPI.
А теперь пытается добиться, чтобы здесь ему устроили бесплатные курсы ликбеза по программированию
Re[2]: Что означает virtual при объявлении функции внутри класса?
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Означает необходимость изучения языка прежде, чем приступать к написанию кода.
Первый не выдержал
Сам хотел что-то подобное ответить… но вспомнил себя в далеком 96-97ом со Сваном в обнимку, и подобрел
RF>Вообще-то C++ -- такой язык программирования, который учат всю жизнь.
Ну да, ну да А некоторые еще и учатся в гугле набирать текст в поисковой строке всю жизнь... А еще есть негры люди, которые читать учатся всю жизнь.
Ключевое слово "учатся". Не научились и пользуются, развиваются, растут над собой. А все "учатся"
PS: если б кое кто научился читать (научился, а не "учился всю жизнь") то прочитал бы Сполски. У него есть про "всю жизнь С++" отличная мысль. Мол "опыт С++ 5 лет and up" это полная фигня. Ибо в С++ нечего больше "выучивать" чем на 2 года. Если за 2 года неасилили (ц), то делать вам в программировании нечего. Есть нюансы, есть подходы, есть парадигмы, есть определенные способы решения задач (паттерны) — но все это не из области нубских вопросв что что такое "virtual"
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Здравствуйте, AleksandrN, Вы писали:
AN>>Дома технической книги на Ленинском проспекте, к сожалению, уже нет.
PD> .
PD>Сколько воспоминаний с ним связано...
PD>А тот книжный магазин, что рядом с ним, небольшое здание рядом со Спутником, появился в 2000-е — существует ?
Тогда появились XT и AT и какое удовольствие было программировать после ДВК-2. Главное скорсть компиляции. На ДВК-2 доходило по полчаса дискетки 5 дюймов. Эх жизнь была!
и солнце б утром не вставало, когда бы не было меня
Re[9]: Что означает virtual при объявлении функции внутри класса?
Здравствуйте, AleksandrN, Вы писали:
AN>Необходимость постоянно что-то учить — особенность нашей профессии.
Это да.
По поводу книжных магазинов--лучше "Московский дом книги" на Новом Арбате, "Библио-глобус" на Лубянке, "Дом технической книги" на Ленинском проспекте, "Москва-книга" на Тверской, "Молодая гвардия" на Полянке.
А в Королёве в книжных магазинах мало интересного.
1613 г. = 2024 г.
Re[5]: Что означает virtual при объявлении функции внутри класса?
Здравствуйте, AlexGin, Вы писали:
AG>Здравствуйте, alzt, Вы писали:
M>>>Я так понимаю, товарищ, после долгих лет в политике и прочих подобных форумах, решил на C++ список развернуть
A>>В политике он не замечен. AG> AG>Там сделали типа threshold >= 2 по рейтингу, посему и не замечен. AG>И кстати — правильно сделали!
Вот поэтому я там и не пишу.
А то бы такого там написал!
1613 г. = 2024 г.
Re: Что означает virtual при объявлении функции внутри класса?
Здравствуйте, RussianFellow, Вы писали:
RF>Чем отличается конструкция
RF>
RF>class MyClass1
RF>{
RF> // данные класса MyClass1;
RF> MyClass1(); // конструктор
RF> ~MyClass1(); // деструктор
RF> int MyFunc1(int a, inb b);
RF> // прочие методы класса MyCLass1;
RF>};
RF>class MyClass2 : public MyClass1
RF>{
RF> // данные класса MyCLass2;
RF> MyClass2(); // конструктор
RF> ~MyClass2(); // деструктор;
RF> int MyFunc1(int a, int b);
RF> // прочие методы класса MyClass2;
RF>};
RF>
RF>от конструкции
RF>
RF>class MyClass1
RF>{
RF> // данные класса MyClass1;
RF> MyClass1(); // конструктор
RF> ~MyClass1(); // деструктор
RF> virtual int MyFunc1(int a, inb b);
RF> // прочие методы класса MyCLass1;
RF>};
RF>class MyClass2 : public MyClass1
RF>{
RF> // данные класса MyCLass2;
RF> MyClass2(); // конструктор
RF> ~MyClass2(); // деструктор;
RF> virtual int MyFunc1(int a, int b);
RF> // прочие методы класса MyClass2;
RF>};
RF>
RF>?
если написать
MyClass1 *m = new MyClass2; m->MyFunc1(1,2)
(Обратите внимание что слева от = указан тип MyClass1, а справа — MyClass2)
То в первой вашей конструкции у вас вызовется MyFunc1, обьявленная в классе MyClass1 (потому что тип указателя m — MyClass1, хоть и тип объекта MyClass2, но сам объект m не содержит информации о типе)
А во втором случае этот же код вызовет MyFunc1 из класса MyClass2 (теперь обьект m содержит в себе информацию о том, что его настоящий тип MyClass2, хоть сам указатель и обьявлен как MyClass1. Cлово virtual указывает компилятору, чтоб он добавил в обьект специальную таблицу указателей на функции класса MyClass2, а не руководствовался типом указателя (в нашем случае MyClass1))
Здравствуйте, RussianFellow, Вы писали:
RF>Вообще-то C++ -- такой язык программирования, который учат всю жизнь.
Это НЕ ПРАВДА! Если ты учишь С++ как следует, то ты его выучишь. С++ — простой язык, надо просто внимательно разбираться что и как работает, не заниматься вуду программированием, а именно разбираться. Нюанс может быть в библиотеках, но если ты знаешь как работает язык, то разобраться что делает библиотека можно без проблем.
Здравствуйте, pilgrim_, Вы писали:
_>Здравствуйте, AlexGin, Вы писали:
AG>>Жирный минус — раздел ожил за счёт детских вопросов, которые гуглятся на пол-раза. AG>>P.S. С такими простыми вопросами — правильнее было бы начинать, например с .NET и C# — там всё это проще, нежели в MFC.
_> ... он 9 лет назад уже имел 10-ти летний опыт разработки, в том числе и на C++ и на MFC.
...и долго не мог понять, каким боком здесь товарищ, спрашивающий насчёт virtual?
Затем я понял, что это о нём
_>ps: вероятно слишком много сил уходит на поиск врагов страны
Да, во всём у него виноваты евреи. Во всех отраслях IT они насолили.
Эта мысль стара как мир. Ничего нового в этом нет. Это ведь евреи придумали на голову ТС проклятый полиморфизм!
ВЫВОД:
Если бы ТС меньше читал "Протоколы сионских мудрецов",
а больше бы читал книги Бьярна Страуструпа, Тома Свана, Дэвида Круглински, Джефри Рихтера —
тогда этих детских вопросов мы бы здесь не видели!
Здравствуйте, Carc, Вы писали:
PD>>Означает необходимость изучения языка прежде, чем приступать к написанию кода. C>Первый не выдержал C>Сам хотел что-то подобное ответить… но вспомнил себя в далеком 96-97ом со Сваном в обнимку, и подобрел
Сван, Том Сван, наше все. А еще — "C++ для чайников"
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Здравствуйте, Evgeniy Skvortsov, Вы писали:
ES>Здравствуйте, RussianFellow, Вы писали:
RF>>Вот поэтому я там и не пишу. RF>>А то бы такого там написал!
ES>Это не проблема, влепит тебе пара человек в профильном форуме 2 и будешь писать в политику
Это интересная идея
Re: Что означает virtual при объявлении функции внутри класса?
Здравствуйте, RussianFellow, Вы писали:
RF>Что означает virtual при объявлении функции внутри класса? RF>Как я понимаю, при помощи слова virtual обеспечивается полиморфизм--способность программы во время своего исполнения определять, как какому классу относится функция с определённым именем.
Жирный минус — раздел ожил за счёт детских вопросов, которые гуглятся на пол-раза.
P.S. С такими простыми вопросами — правильнее было бы начинать, например с .NET и C# — там всё это проще, нежели в MFC.
Re[3]: Что означает virtual при объявлении функции внутри класса?
Здравствуйте, Ops, Вы писали:
M>>Я так понимаю, товарищ, после долгих лет в политике и прочих подобных форумах, решил на C++ список развернуть
Ops>Зачем для этого "virtual"?
Может, он свою иерархию контейнеров делает, с корневым классом CContainer и виртуальным методом reverse
Здравствуйте, T4r4sB, Вы писали:
TB>Вот я по названию темы подумал, что будет хитрый вопрос с подвохом, возможно раскрывающий очередной баг Студии. TB>А оказалось — вопрос по букварю
А я по автору темы подумал Слегка, правда, тоже удивился нубовости вопроса, но шока не испытал
, в том числе и на C++ и на MFC.
RF>Вообще-то C++ -- такой язык программирования, который учат всю жизнь.
В C++ много чего есть и он развивается и появляются новые возможности. Но — ключевое слово virtual в нём было всегда и является базовым понятием при программировании на C++ с использованием ООП. А без ООП лучше использовать C вместо C++.
Необходимость постоянно что-то учить — особенность нашей профессии.
Здравствуйте, RussianFellow, Вы писали:
RF>Здравствуйте, AleksandrN, Вы писали:
AN>>Необходимость постоянно что-то учить — особенность нашей профессии.
RF>Это да.
RF>По поводу книжных магазинов--лучше "Московский дом книги" на Новом Арбате, "Библио-глобус" на Лубянке, "Дом технической книги" на Ленинском проспекте, "Москва-книга" на Тверской, "Молодая гвардия" на Полянке.
RF>А в Королёве в книжных магазинах мало интересного.
Дома технической книги на Ленинском проспекте, к сожалению, уже нет. Вместо него — филиал дома книги на Новом Арбате, в котором ассортимент технической литературы гораздо меньше, чем был в Доме Технической Книги.
А поближе к Королёву могу посоветовать дом книги "Медведково" (Москва, Заревый проезд, д. 12) и книжный отдел компьютерного магазина Ф-Центр (Москва, Сухонская ул. 7А). Проезд из Королёва — электричкой до платформы Лось, затем — на автобусе 774 или электричкой до платформы Лосиноостровская, далее автобус 601. Раньше в этих магазинах был неплохой ассортимент книг по ИТ, но я давно там не был, возможно что-то изменилось.
Re[11]: Что означает virtual при объявлении функции внутри класса?
Здравствуйте, Evgeniy Skvortsov, Вы писали:
ES>Это мой косяк. Когда я задолбался отвечать в WINAPI, посоветовал ТС взять какой-нибудь фреймворк типа MFC или WTL. ES>В MFC отвечать стало несколько проще, но надо было советовать Delphi, там почти всё о чём спрашивается — делается в несколько кликов мышки. ES>
Да, в MFC всё несколько проще, чем в WINAPI, но тем не менее сложнее, чем в современных средах разработки.
Так, если придерживаться языка C++, то в том же современном Qt — всё делается удобнее и проще, нежели в MFC.
Re[8]: Что означает virtual при объявлении функции внутри класса?
Здравствуйте, RussianFellow, Вы писали:
RF>В MFC ненамного сложнее, чем в Delphi.
Неправда. Многие вопросы в Делфи решаются вообще без строчки кода.
Жирный шрифт контролов, измененный вид заголовка окна, заполнение комбобоксов и т.д.
В МФЦ для этого всего нужно писать код, а в Делфи — просто изменить свойства в дизайнере мышкой.
RF> Как человек, знакомый с Delphi, JBuilder, Borland C++Builder, Visual C# и теперь с MFC говорю.
Знаком с МФЦ ? Ну ну
И при этом спрашивать как обрабатывать собщение. При том, что я уже два раза объяснял.
Re[11]: Что означает virtual при объявлении функции внутри класса?
Здравствуйте, pilgrim_, Вы писали:
RF>>Что означает virtual при объявлении функции внутри класса?
_>Приходи через 10 лет, коллеги уже не так будут бурно реагировать, стаж, все такое — факт, с такими вопросами аксакалам точно помогают
Имеется указатель CString* -- один из параметров функции, в который возвращается по её выполнении строковое значение.
Нужно преобразовать этот CString* в строку типа THCAR* (или char*). Как это правильно сделать?
Здравствуйте, Marty, Вы писали:
PD>>Означает необходимость изучения языка прежде, чем приступать к написанию кода.
M>Я так понимаю, товарищ, после долгих лет в политике и прочих подобных форумах, решил на C++ список развернуть
В политике он не замечен. Похоже просто работу меняет, а там вопросы странные задают.
Re[8]: Что означает virtual при объявлении функции внутри класса?
Здравствуйте, alzt, Вы писали:
M>>Я так понимаю, товарищ, после долгих лет в политике и прочих подобных форумах, решил на C++ список развернуть
A>В политике он не замечен.
Там сделали типа threshold >= 2 по рейтингу, посему и не замечен.
И кстати — правильно сделали!
Здравствуйте, RussianFellow, Вы писали:
RF>В MFC ненамного сложнее, чем в Delphi. Как человек, знакомый с Delphi, JBuilder, Borland C++Builder, Visual C# и теперь с MFC говорю.
Бегущую строку то сделал?
Кстати для тех задач, которые тебе приходится решать на MFC, есть более подходящий, очень мощный и простой фреймворк — WPF. Очень советую, тем более, что C# ты уже знаешь
Здравствуйте, night beast, Вы писали:
RF>>>Что означает virtual при объявлении функции внутри класса?
A>>Просто интересно, ты в резюме указываешь язык С++?
NB>здесь
RussianFellow:
RF>Что означает virtual при объявлении функции внутри класса?
Я раньше думал, что RussianFellow это тот же Колюка, православный активист, известный под ником erslgoeirjh.
Теперь чего-то засомневался. Очень уж тролльские вопросы.
Модератор-националист Kerk преследует оппонентов по политическим мотивам.
Re[2]: Что означает virtual при объявлении функции внутри класса?
Здравствуйте, Дрободан Фрилич, Вы писали: ДФ>Я раньше думал, что RussianFellow это тот же Колюка, православный активист, известный под ником erslgoeirjh. ДФ>Теперь чего-то засомневался. Очень уж тролльские вопросы.
Здравствуйте, RussianFellow, Вы писали:
RF>Что означает virtual при объявлении функции внутри класса? RF>Как я понимаю, при помощи слова virtual обеспечивается полиморфизм--способность программы во время своего исполнения определять, как какому классу относится функция с определённым именем.
RF>Но хотелось бы узнать поподробнее об этом ключевом слове.
Виртуалом является сущность, которая по сути своей идеальна, но ее никто не видит. Почему реальность виртуальная? Почему есть виртуальные машины? К сожалению русская вики не содержит статью про виртуальность, но это философское понятие отлично описано в английской. Также существуют синонимы, такие как условный, воображаемый, несуществующий, возможный, кажущийся.
Re[9]: Что означает virtual при объявлении функции внутри класса?
Здравствуйте, Дрободан Фрилич, Вы писали:
ДФ>Я раньше думал, что RussianFellow это тот же Колюка, православный активист, известный под ником erslgoeirjh. ДФ>Теперь чего-то засомневался. Очень уж тролльские вопросы.
Здравствуйте, RussianFellow, Вы писали:
RF>По поводу книжных магазинов--лучше "Московский дом книги" на Новом Арбате, "Библио-глобус" на Лубянке, "Дом технической книги" на Ленинском проспекте, "Москва-книга" на Тверской, "Молодая гвардия" на Полянке.
Лучше Озон или Лабиринт — все книги всегда в наличии, цены лучше и домой приносят. В "Дом книги" имеет смысл зайти, чтобы подержать книжку в руках перед тем, как купить ее в интернет-магазине.
Re[11]: Что означает virtual при объявлении функции внутри класса?
Pzz>Лучше Озон или Лабиринт — все книги всегда в наличии, цены лучше и домой приносят. В "Дом книги" имеет смысл зайти, чтобы подержать книжку в руках перед тем, как купить ее в интернет-магазине.
А не проще ли зайти на какой-нить торрент, чтобы поддержать в руках, прежде чем купить?
Кстати в Озоне очень часто есть отрывок+содержание, так что полистать и у них можно. Плюс последние годы радует куча пунктов выдачи в Озоне, чуть ли уже не в каждом "ларьке" появились (иногда бывает удобно, если не охота ждать курьере, завязываться по времени на него).
Здравствуйте, Carc, Вы писали:
Pzz>>Лучше Озон или Лабиринт — все книги всегда в наличии, цены лучше и домой приносят. В "Дом книги" имеет смысл зайти, чтобы подержать книжку в руках перед тем, как купить ее в интернет-магазине. C>А не проще ли зайти на какой-нить торрент, чтобы поддержать в руках, прежде чем купить?
Это тоже вариант. Но посещение книжного магазина можно совместить с приятной прогулкой и чашечкой кофе (или чего покрепче). В битторренте кофе пока не раздают
C>Кстати в Озоне очень часто есть отрывок+содержание, так что полистать и у них можно. Плюс последние годы радует куча пунктов выдачи в Озоне, чуть ли уже не в каждом "ларьке" появились (иногда бывает удобно, если не охота ждать курьере, завязываться по времени на него).
Лабиринт дешевле Озона, а ассортимент и покрытие пунктами выдачи у них примерно одинаковое.
Re[13]: Что означает virtual при объявлении функции внутри класса?
Здравствуйте, Pzz, Вы писали:
Pzz>Лабиринт дешевле Озона, а ассортимент и покрытие пунктами выдачи у них примерно одинаковое.
Озон возит в "почтоматы" — такие ящики в супермаркетах или рядом с ними на улице. В моей деревне, например, их 2 штуки, а пунктов выдачи рядом не наблюдается.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[14]: Что означает virtual при объявлении функции внутри класса?
Здравствуйте, Ops, Вы писали:
Pzz>>Лабиринт дешевле Озона, а ассортимент и покрытие пунктами выдачи у них примерно одинаковое.
Ops>Озон возит в "почтоматы" — такие ящики в супермаркетах или рядом с ними на улице. В моей деревне, например, их 2 штуки, а пунктов выдачи рядом не наблюдается.
В почтоматы они все умеют возить.
Re[15]: Что означает virtual при объявлении функции внутри класса?
Здравствуйте, Pavel Dvorkin, Вы писали:
RF>>Что означает virtual при объявлении функции внутри класса? PD>Означает необходимость изучения языка прежде, чем приступать к написанию кода.
Та не, на MFC пусть приступает
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[6]: Что означает virtual при объявлении функции внутри класса?