Что означает virtual при объявлении функции внутри класса?
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 07.12.16 08:03
Оценка: 9 (2) -4 :))) :))) :)
Что означает 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: Что означает virtual при объявлении функции внутри класса?
От: Qt-Coder  
Дата: 07.12.16 08:11
Оценка:
В первом случае ты не сможешь вызвать функцию MyClass2 по указателю на MyClass1
Re: Что означает virtual при объявлении функции внутри класса?
От: Carc Россия https://vk.com/gosha_mazov
Дата: 07.12.16 08:11
Оценка: 2 (1) +3
Здравствуйте, RussianFellow, Вы писали:

RF>Что означает virtual при объявлении функции внутри класса?

Лекция. Виртуальные функции и полиморфизм
Aml Pages Home
Re: Что означает virtual при объявлении функции внутри класса?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 07.12.16 08:25
Оценка:
Здравствуйте, RussianFellow, Вы писали:

RF>Что означает virtual при объявлении функции внутри класса?

RF>Как я понимаю, при помощи слова virtual обеспечивается полиморфизм--способность программы во время своего исполнения определять, как какому классу относится функция с определённым именем.

http://rsdn.org/forum/philosophy/2853873
Автор: Gaperton
Дата: 26.02.08
Re: Что означает virtual при объявлении функции внутри класса?
От: Pavel Dvorkin Россия  
Дата: 07.12.16 09:45
Оценка: 2 (2) +21 :))
Здравствуйте, RussianFellow, Вы писали:

RF>Что означает virtual при объявлении функции внутри класса?


Означает необходимость изучения языка прежде, чем приступать к написанию кода.
With best regards
Pavel Dvorkin
Re[2]: Что означает virtual при объявлении функции внутри класса?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 07.12.16 09:55
Оценка: 1 (1) +3 :))) :))
Здравствуйте, Pavel Dvorkin, Вы писали:

RF>>Что означает virtual при объявлении функции внутри класса?


PD>Означает необходимость изучения языка прежде, чем приступать к написанию кода.


Я так понимаю, товарищ, после долгих лет в политике и прочих подобных форумах, решил на C++ список развернуть
Маньяк Робокряк колесит по городу
Re[2]: Что означает virtual при объявлении функции внутри класса?
От: Carc Россия https://vk.com/gosha_mazov
Дата: 07.12.16 10:00
Оценка: +2
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Означает необходимость изучения языка прежде, чем приступать к написанию кода.

Первый не выдержал
Сам хотел что-то подобное ответить… но вспомнил себя в далеком 96-97ом со Сваном в обнимку, и подобрел
Aml Pages Home
Re[3]: Что означает virtual при объявлении функции внутри класса?
От: Pavel Dvorkin Россия  
Дата: 07.12.16 10:54
Оценка: +8 :))
Здравствуйте, Carc, Вы писали:

C>Сам хотел что-то подобное ответить… но вспомнил себя в далеком 96-97ом со Сваном в обнимку, и подобрел


Я понимаю, но всему предел есть.

Вот сюда посмотри.

http://rsdn.org/forum/mfc/
With best regards
Pavel Dvorkin
Re[4]: Что означает virtual при объявлении функции внутри класса?
От: AlexGin Беларусь  
Дата: 07.12.16 11:06
Оценка: +3
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Я понимаю, но всему предел есть.

+100500
Этот товарищ, что спрашивал насчёт virtual, захламил и затроллил всё по MFC и WINAPI.
А теперь пытается добиться, чтобы здесь ему устроили бесплатные курсы ликбеза по программированию
Re[4]: Что означает virtual при объявлении функции внутри класса?
От: Carc Россия https://vk.com/gosha_mazov
Дата: 07.12.16 11:10
Оценка:
PD>Я понимаю, но всему предел есть.
PD>Вот сюда посмотри.
PD>http://rsdn.org/forum/mfc/
Да я уж видел
Aml Pages Home
Re[4]: Что означает virtual при объявлении функции внутри класса?
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 07.12.16 14:30
Оценка: :))) :))) :)
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Здравствуйте, Carc, Вы писали:


C>>Сам хотел что-то подобное ответить… но вспомнил себя в далеком 96-97ом со Сваном в обнимку, и подобрел


PD>Я понимаю, но всему предел есть.


PD>Вот сюда посмотри.


PD>http://rsdn.org/forum/mfc/

  Скрытый текст
Твою жешь мать...

Один плюс, раздел ожил немного
Sic luceat lux!
Re[5]: Что означает virtual при объявлении функции внутри класса?
От: AlexGin Беларусь  
Дата: 07.12.16 14:38
Оценка:
Здравствуйте, Kernan, Вы писали:

PD>>Вот сюда посмотри.


PD>>http://rsdn.org/forum/mfc/

K>
  Скрытый текст
K>Твою жешь мать...

K>Один плюс, раздел ожил немного

Жирный минус — раздел ожил за счёт детских вопросов, которые гуглятся на пол-раза.
P.S. С такими простыми вопросами — правильнее было бы начинать, например с .NET и C# — там всё это проще, нежели в MFC.
Re: Что означает virtual при объявлении функции внутри класса?
От: Михaил  
Дата: 07.12.16 15:17
Оценка: 2 (1)
Здравствуйте, 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))

Это и весь полиморфизм.

А для чего бывает полезно писать MyClass1 *m = new MyClass2 вместо MyClass2 *m = new MyClass2 — прочитайте здесь http://www.c-cpp.ru/books/dlya-chego-nuzhny-virtualnye-funkcii
Re[3]: Что означает virtual при объявлении функции внутри класса?
От: Ops Россия  
Дата: 07.12.16 17:03
Оценка:
Здравствуйте, Marty, Вы писали:

M>Я так понимаю, товарищ, после долгих лет в политике и прочих подобных форумах, решил на C++ список развернуть


Зачем для этого "virtual"?
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[4]: Что означает virtual при объявлении функции внутри класса?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 07.12.16 17:09
Оценка:
Здравствуйте, Ops, Вы писали:

M>>Я так понимаю, товарищ, после долгих лет в политике и прочих подобных форумах, решил на C++ список развернуть


Ops>Зачем для этого "virtual"?


Может, он свою иерархию контейнеров делает, с корневым классом CContainer и виртуальным методом reverse
Маньяк Робокряк колесит по городу
Re[4]: Что означает virtual при объявлении функции внутри класса?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 07.12.16 17:12
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Я понимаю, но всему предел есть.


PD>Вот сюда посмотри.


PD>http://rsdn.org/forum/mfc/


Ад и Израиль какой-то
Маньяк Робокряк колесит по городу
Re: Что означает virtual при объявлении функции внутри класса?
От: T4r4sB Россия  
Дата: 07.12.16 17:37
Оценка:
Вот я по названию темы подумал, что будет хитрый вопрос с подвохом, возможно раскрывающий очередной баг Студии.
А оказалось — вопрос по букварю
Re[2]: Что означает virtual при объявлении функции внутри класса?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 07.12.16 18:02
Оценка:
Здравствуйте, T4r4sB, Вы писали:

TB>Вот я по названию темы подумал, что будет хитрый вопрос с подвохом, возможно раскрывающий очередной баг Студии.

TB>А оказалось — вопрос по букварю

А я по автору темы подумал Слегка, правда, тоже удивился нубовости вопроса, но шока не испытал
Маньяк Робокряк колесит по городу
Re[6]: Что означает virtual при объявлении функции внутри класса?
От: pilgrim_ Россия  
Дата: 07.12.16 21:43
Оценка: :))) :))
Здравствуйте, AlexGin, Вы писали:

AG>Жирный минус — раздел ожил за счёт детских вопросов, которые гуглятся на пол-раза.

AG>P.S. С такими простыми вопросами — правильнее было бы начинать, например с .NET и C# — там всё это проще, нежели в MFC.

Начинать это не про ТС, он 9 лет назад уже имел 10-ти летний опыт разработки
Автор: erslgoeirjh
Дата: 14.05.07
, в том числе и на C++ и на MFC.

ps: вероятно слишком много сил уходит на поиск врагов страны
Re[7]: Что означает virtual при объявлении функции внутри класса?
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 08.12.16 07:06
Оценка: +1 :))) :)))
Здравствуйте, pilgrim_, Вы писали:

_>Начинать это не про ТС, он 9 лет назад уже имел 10-ти летний опыт разработки
Автор: erslgoeirjh
Дата: 14.05.07
, в том числе и на C++ и на MFC.


Вообще-то C++ -- такой язык программирования, который учат всю жизнь.
1613 г. = 2024 г.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.