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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> static virtual function 
:(
    Опции темы
gr1fon
Дата 23.8.2007, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Пытаюсь разобраться с static virtual functions. Объясните пожалуйста для чего они нужны smile
PM MAIL   Вверх
Void
Дата 23.8.2007, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

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



Ну, сам придумал — сам и разбирайся smile

Серьёзно, нет такого в C++, и ни в одном языке нет, потому что само сочетание бессмысленно.


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
zkv
Дата 23.8.2007, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



Цитата(gr1fon @  23.8.2007,  21:39 Найти цитируемый пост)
Пытаюсь разобраться с static virtual functions. 

таких не бывает, это ты где нашел употребление такого термина?
PM MAIL   Вверх
gr1fon
Дата 23.8.2007, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот здесь увидел подобную конструкцию: http://www.gamedev.ru/code/forum/?id=64645 smile
PM MAIL   Вверх
Daevaorn
Дата 23.8.2007, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Это опечатка. Такой конструкции не существует в С++.
PM MAIL WWW   Вверх
zkv
Дата 23.8.2007, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



Цитата(gr1fon @  23.8.2007,  22:01 Найти цитируемый пост)
Вот здесь увидел подобную конструкцию: http://www.gamedev.ru/code/forum/?id=64645 

там  термин "static virtual functions" использовался условно.
PM MAIL   Вверх
Xenon
Дата 23.8.2007, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Да, а то статическое динамическое связывание звучит как-то интересно smile


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


Опытный
**


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

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



Цитата(Void @  23.8.2007,  21:47 Найти цитируемый пост)
потому что само сочетание бессмысленно

Ну, не совсем. Ведь можно ж статический метод вызывать так же, как нестатический:

Код
#include <iostream>
#include <ostream>

struct A
{
    static void f() { std::cout << "static method" << std::endl; }
};

int main()
{
    A().f(); // OK
}

Так что могли бы быть статические виртуальные функции, вот только не нужны они никому smile 
PM MAIL   Вверх
zkv
Дата 23.8.2007, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



Цитата(UnrealMan @  23.8.2007,  23:09 Найти цитируемый пост)
Так что могли бы быть статические виртуальные функции

это как? И к какому объекту она привязывалась бы? Она ведь this не получает.
PM MAIL   Вверх
UnrealMan
Дата 23.8.2007, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ну я же показал пример.

Добавлено через 3 минуты и 16 секунд
Вот такой код вполне мог бы работать:

Код
class C1
{
public:
    virtual static void f() {}
};

class C2 : public C1
{
public:
    static void f() {}
};

void f()
{
    C2 c2;
    C1* p = &c2;
    p->f(); // C2::f()
}


PM MAIL   Вверх
zkv
Дата 23.8.2007, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



UnrealMan, и что, для того чтобы понять метод какого класса запускать функция должна иметь таблицу виртуальных методов, те нужен this, те в твою "статическую" функцию нужно неявно его передать - а это уже нестатический метод получится smile
PM MAIL   Вверх
Xenon
Дата 23.8.2007, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



UnrealMan, мог бы, да не работает. Покажи мне кто это скомпилирует.
Код

error C2216: 'virtual' cannot be used with 'static'
warning C4526: 'C2::f' : static member function cannot override virtual function 'void C1::f(void)'
  override ignored, virtual function will be hidden
  see declaration of 'C1::f'



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



****


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

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



Xenon, мы гипотетически рассматриваем вопрос smile
PM MAIL   Вверх
Void
Дата 23.8.2007, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

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



Цитата(zkv @  24.8.2007,  01:27 Найти цитируемый пост)
для того чтобы понять метод какого класса запускать функция должна иметь таблицу виртуальных методов

Да.
Цитата(zkv @  24.8.2007,  01:27 Найти цитируемый пост)
те в твою "статическую" функцию нужно неявно его передать - а это уже нестатический метод получится

VMT теоретически может содержать указатель на самую обыкновенную функцию, и ничего передавать не понадобится.

Но я не могу придумать ни одного практического применения такому варианту.



--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
UnrealMan
Дата 23.8.2007, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(zkv @  23.8.2007,  23:27 Найти цитируемый пост)
те нужен this, те в твою "статическую" функцию нужно неявно его передать - а это уже нестатический метод получится 

Зачем передавать что-то в саму функцию? В зависимости от динамического типа объекта могла бы вызываться нужная функция и всё.


Цитата(Xenon @  23.8.2007,  23:27 Найти цитируемый пост)
UnrealMan, мог бы, да не работает.

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

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

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

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

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


 




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


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

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