virtual static и static virtual
От: MByte  
Дата: 17.07.03 12:44
Оценка: 10 (1)
Объясните пожалуйста что это такое и с чем его едят.
Везде пишут только про простые static или virtual функции.
Можно ли использовать такие конструкции?Пробовал методом проб и ошибок, но ничего не вышло, компилятор посылает меня с моими функциями очень далеко.
И еще вопрос раз уже дорвался до форума.Как можно использовать virtual для множественного наследования?Если это все возможно, то хотелось бы увидеть реальные примеры с объяснением.
Буду очень признателен за просвещение или ссылку где можно это все почерпнуть.
Заранее спасибо.
Re: virtual static и static virtual
От: MaximE Великобритания  
Дата: 17.07.03 12:49
Оценка: +1
Здравствуйте, MByte, Вы писали:

MB>Буду очень признателен за просвещение или ссылку где можно это все почерпнуть.


Может стоит купить хорошую книжку по c++, например Страуструпа?
Re[2]: virtual static и static virtual
От: MByte  
Дата: 17.07.03 13:02
Оценка:
Здравствуйте, MaximE, Вы писали:

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


MB>>Буду очень признателен за просвещение или ссылку где можно это все почерпнуть.


ME>Может стоит купить хорошую книжку по c++, например Страуструпа?


У меня есть Страуструп, но там я нашел только описание virtual и static.Их комбинации нигде не видел, тем более с примерами.Может плохо искал.Искал в интернете.Результат ноль.Все тыкают куда угодно, говорят мол есть такое, а рассказать толком, да еще и примеры привести никто не может.Все только умничать и умеют.Устал искать уже, вот и решил закинуть вопрос на форум.
Re[3]: virtual static и static virtual
От: PM  
Дата: 17.07.03 13:08
Оценка:
MB>>> Буду очень признателен за просвещение или ссылку где можно это все
MB>>> почерпнуть.
ME>> Может стоит купить хорошую книжку по c++, например Страуструпа?
M> У меня есть Страуструп, но там я нашел только описание virtual и
M> static.Их комбинации нигде не видел, тем более с примерами.Может плохо
M> искал.Искал в интернете.Результат ноль.Все тыкают куда угодно, говорят
M> мол есть такое, а рассказать толком, да еще и примеры привести никто не
M> может.Все только умничать и умеют.Устал искать уже, вот и решил закинуть
M> вопрос на форум.
Статические функции (класса) не могут быть виртуальными
Posted via RSDN NNTP Server 1.6 RC1
Re[3]: virtual static и static virtual
От: Lorenzo_LAMAS  
Дата: 17.07.03 13:09
Оценка: +1
Их комбинация невозможна (и не нужна)
Of course, the code must be complete enough to compile and link.
Re[4]: virtual static и static virtual
От: Lorenzo_LAMAS  
Дата: 17.07.03 13:10
Оценка:
PM>Статические функции (класса) не могут быть виртуальными

А не класса тоже не могут
Of course, the code must be complete enough to compile and link.
Re[3]: virtual static и static virtual
От: Bell Россия  
Дата: 17.07.03 13:10
Оценка:
Здравствуйте, MByte, Вы писали:

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


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


MB>>>Буду очень признателен за просвещение или ссылку где можно это все почерпнуть.


ME>>Может стоит купить хорошую книжку по c++, например Страуструпа?


MB>У меня есть Страуструп, но там я нашел только описание virtual и static.Их комбинации нигде не видел, тем более с примерами.Может плохо искал.Искал в интернете.Результат ноль.Все тыкают куда угодно, говорят мол есть такое, а рассказать толком, да еще и примеры привести никто не может.Все только умничать и умеют.Устал искать уже, вот и решил закинуть вопрос на форум.


Такая комбинация невозможна. Для работы виртуальной функции необходим доступ к таблице виртуальных функций класса. Этот доступ возможен только через указатель на эту таблицу (по крайней мере во многих реализациях это так), а указатель содержится в каждом объекте. static же функция ни с какими объектами дела не имеет, а посему не имеет возможности добраться до таблицы.
Любите книгу — источник знаний (с) М.Горький
Re[3]: virtual static и static virtual
От: LaptevVV Россия  
Дата: 17.07.03 13:11
Оценка:
Здравствуйте, MByte, Вы писали:

MB>У меня есть Страуструп, но там я нашел только описание virtual и static.Их комбинации нигде не видел, тем более с примерами.Может плохо искал.Искал в интернете.Результат ноль.Все тыкают куда угодно, говорят мол есть такое, а рассказать толком, да еще и примеры привести никто не может.Все только умничать и умеют.Устал искать уже, вот и решил закинуть вопрос на форум.

Статические функции не могут быть виртуальными, а виртуальные — статическими. Поэтому и нет нигде ничего.
А что вообще за проблема, зачем вдруг понадобилось?
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[3]: virtual static и static virtual
От: MaximE Великобритания  
Дата: 17.07.03 13:15
Оценка:
Здравствуйте, MByte, Вы писали:

MB>У меня есть Страуструп, но там я нашел только описание virtual и static.Их комбинации нигде не видел, тем более с примерами.Может плохо искал.Искал в интернете.Результат ноль.Все тыкают куда угодно, говорят мол есть такое, а рассказать толком, да еще и примеры привести никто не может.Все только умничать и умеют.Устал искать уже, вот и решил закинуть вопрос на форум.


А зачем тебе такое?
Re[5]: virtual static и static virtual
От: PM  
Дата: 17.07.03 13:24
Оценка:
PM>> Статические функции (класса) не могут быть виртуальными
LL> А не класса тоже не могут
А виртуальных функций-не-членов-класса не может быть
:-p
Posted via RSDN NNTP Server 1.6 RC1
Re[6]: virtual static и static virtual
От: Lorenzo_LAMAS  
Дата: 17.07.03 13:28
Оценка:
Здравствуйте, PM, Вы писали:

Вот твое исходное высказывание
PM>>> Статические функции (класса) не могут быть виртуальными
Из него можно сделать при желании неверный вывод, что статические функции (не класса — т.е. с внутренней компоновкой)могут быть виртуальными
Of course, the code must be complete enough to compile and link.
Re[4]: virtual static и static virtual
От: MByte  
Дата: 17.07.03 13:34
Оценка:
Здравствуйте, MaximE, Вы писали:

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


MB>>У меня есть Страуструп, но там я нашел только описание virtual и static.Их комбинации нигде не видел, тем более с примерами.Может плохо искал.Искал в интернете.Результат ноль.Все тыкают куда угодно, говорят мол есть такое, а рассказать толком, да еще и примеры привести никто не может.Все только умничать и умеют.Устал искать уже, вот и решил закинуть вопрос на форум.


ME>А зачем тебе такое?


Как-то спросили меня, а я не знал что ответить.С тех пор ищу ответ.Просто интересно.Программируя на С++ даже не задумывался про такую конструкцию.Вот здесь http://cprime.hypermart.net/rus/lesson/21.htm нашел пример.Но сделать свой не смог.
Re[5]: virtual static и static virtual
От: MByte  
Дата: 17.07.03 13:38
Оценка:
Здравствуйте, MByte, Вы писали:

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


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


MB>>>У меня есть Страуструп, но там я нашел только описание virtual и static.Их комбинации нигде не видел, тем более с примерами.Может плохо искал.Искал в интернете.Результат ноль.Все тыкают куда угодно, говорят мол есть такое, а рассказать толком, да еще и примеры привести никто не может.Все только умничать и умеют.Устал искать уже, вот и решил закинуть вопрос на форум.


ME>>А зачем тебе такое?


MB>Как-то спросили меня, а я не знал что ответить.С тех пор ищу ответ.Просто интересно.Программируя на С++ даже не задумывался про такую конструкцию.Вот здесь http://cprime.hypermart.net/rus/lesson/21.htm нашел пример.Но сделать свой не смог.


Вот кусок их кода.......

class CProgram {
...
static virtual LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg,
WPARAM wParam, LPARAM lParam);
...
};


class CApp : public CProgram {
public:
...
protected:
//объявление нашей измененной оконной процедуры
static LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg,
WPARAM wParam, LPARAM lParam);
};

//реализация нашей измененной оконной процедуры
LRESULT CALLBACK CApp::WndProc(HWND hWnd, UINT uMsg,
WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_KEYDOWN:
...
обработчик сообщения WM_KEYDOWN
...

case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd,uMsg,wParam,lParam);
}
Re[5]: virtual static и static virtual
От: LaptevVV Россия  
Дата: 17.07.03 13:39
Оценка: +1 :)
Здравствуйте, MByte, Вы писали:

ME>>А зачем тебе такое?


MB>Как-то спросили меня, а я не знал что ответить.С тех пор ищу ответ.Просто интересно.Программируя на С++ даже не задумывался про такую конструкцию.Вот здесь http://cprime.hypermart.net/rus/lesson/21.htm нашел пример.Но сделать свой не смог.


А там же написано:
Однако то, что мы сейчас сделали, компилироваться не будет. Дело в том, что статические функции (объявленные как static) не могут быть виртуальными.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[7]: virtual static и static virtual
От: PM  
Дата: 17.07.03 13:43
Оценка:
LL> Вот твое исходное высказывание
PM>>>> Статические функции (класса) не могут быть виртуальными
LL> Из него можно сделать при желании неверный вывод, что статические
LL> функции (не класса — т.е. с внутренней компоновкой)могут быть
LL> виртуальными
уел
Posted via RSDN NNTP Server 1.6 RC1
Re[6]: virtual static и static virtual
От: MByte  
Дата: 17.07.03 13:50
Оценка:
Здравствуйте, LaptevVV, Вы писали:

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


ME>>>А зачем тебе такое?


MB>>Как-то спросили меня, а я не знал что ответить.С тех пор ищу ответ.Просто интересно.Программируя на С++ даже не задумывался про такую конструкцию.Вот здесь http://cprime.hypermart.net/rus/lesson/21.htm нашел пример.Но сделать свой не смог.


LVV>А там же написано:

LVV>Однако то, что мы сейчас сделали, компилироваться не будет. Дело в том, что статические функции (объявленные как static) не могут быть виртуальными.

С этим более менее понятно, а что насчет множественного наследования с помощью virtual?
Re[7]: virtual static и static virtual
От: LaptevVV Россия  
Дата: 17.07.03 13:53
Оценка:
Здравствуйте, MByte, Вы писали:

LVV>>А там же написано:

LVV>>Однако то, что мы сейчас сделали, компилироваться не будет. Дело в том, что статические функции (объявленные как static) не могут быть виртуальными.

MB>С этим более менее понятно, а что насчет множественного наследования с помощью virtual?


Тут я пока пас — не приходилось использовать на практике. Но в теории виртуальное множественное наследование применяется, чтобы избежать проблемы ромбика, когда от одного класса сначала наследуют два, а потом от этих двух наследует один.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[7]: virtual static и static virtual
От: LaptevVV Россия  
Дата: 17.07.03 13:55
Оценка:
Здравствуйте, MByte, Вы писали:

Вдогонку!
Поищите в форуме виртуальное наследование или множественное наследование — только что видел.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[7]: virtual static и static virtual
От: SergeantAlexx  
Дата: 17.07.03 14:13
Оценка:
Здравствуйте, MByte, Вы писали:

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


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


ME>>>>А зачем тебе такое?


MB>>>Как-то спросили меня, а я не знал что ответить.С тех пор ищу ответ.Просто интересно.Программируя на С++ даже не задумывался про такую конструкцию.Вот здесь http://cprime.hypermart.net/rus/lesson/21.htm нашел пример.Но сделать свой не смог.


LVV>>А там же написано:

LVV>>Однако то, что мы сейчас сделали, компилироваться не будет. Дело в том, что статические функции (объявленные как static) не могут быть виртуальными.

MB>С этим более менее понятно, а что насчет множественного наследования с помощью virtual?



Прикинь, разрабатываешь оконное GUI типа Виндов. И вот у тебя есть три типа окон: просто окно(прямоугольник, текст заголовка,...) (class Window), и два его потомка — окно с меню (Window_with_menu) и окно с полосой прокрутки ( Window_with_scroll). И пришла тебе идея создать окно с меню и с прокруткой. Самый простой путь —
class Window_with_menu_and_scroll : public Window_with_menu, public Window_with_scroll
{
...
}

Но если так, то в каждом экземпляре Window_with_menu_and_scroll будет ДВА экземпляра Window: из Window_with_menu
и из Window_with_scroll. И как тогда его рисовать (Window_with_menu_and_scroll ) ?
А если

class Window_with_menu_and_scroll : public virtual Window_with_menu, public virtual Window_with_scroll
{
...
}

то в Window_with_menu_and_scroll будет только одна копия Window, что и требовалось.
В Страуструпе (гл. 15, по-моему,"Иерархия классов") есть еще пара примеров, довольно небесполезных.
Re[4]: virtual static и static virtual
От: folk Россия  
Дата: 17.07.03 22:24
Оценка: 11 (2)
Здравствуйте, Lorenzo_LAMAS, Вы писали:

L_L>Их комбинация невозможна (и не нужна)


А по-моему пригодилась бы.
Пусть внутри функции this не нужен, но вызов конкретной переопределенной реализации должен осуществляться на основе динамического типа экземпляра (если экземпляра нет, то явной квалификацией класса).
Не слишком сумбурно изложил?
На самом деле, люди не читают газеты, они принимают их каждое утро, так же как ванну. ©Маршалл Мак-Льюэн
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.