Форум программистов, компьютерный форум CyberForum.ru

Виртуальные методы - C++

Восстановить пароль Регистрация
 
 
Auron
2 / 2 / 0
Регистрация: 11.05.2013
Сообщений: 99
13.10.2013, 14:42     Виртуальные методы #1
Всем доброго времени суток! Вопрос следующий. Как я могу функцией делать подмену виртуального метода у класса?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.10.2013, 14:42     Виртуальные методы
Посмотрите здесь:

C++ виртуальные методы
C++ Виртуальные методы
Виртуальные методы класса C++
Наследование и виртуальные методы C++
C++ Виртуальные методы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
13.10.2013, 14:44     Виртуальные методы #2
Именно функцией или методом порожденного класса?
Auron
2 / 2 / 0
Регистрация: 11.05.2013
Сообщений: 99
13.10.2013, 14:48  [ТС]     Виртуальные методы #3
Именно функцией, а то я что то в гугле не найду
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.10.2013, 14:49     Виртуальные методы #4
Цитата Сообщение от Auron Посмотреть сообщение
Как я могу функцией делать подмену виртуального метода у класса?
Если вопрос об этом, то в функцию передавать указатель на базовый класс. В зависимости от того, с объектом какого класса связан этот указатель, можно будет вызывать, в функции, метод или базового класса, или производного.
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
13.10.2013, 14:51     Виртуальные методы #5
alsav22, ну это не подмена..
Auron, ответ никак.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
13.10.2013, 14:55     Виртуальные методы #6
Цитата Сообщение от Auron Посмотреть сообщение
Именно функцией, а то я что то в гугле не найду
Какая-то чушь, мне кажется это невозможно, скорее всего вопрос сформулирован неверно.

Если есть полный текст задания, выложите сюда.

Добавлено через 3 минуты
Или попробуйте сформулировать задачу на конкретном примере. Что вы хотите где заменить.
Auron
2 / 2 / 0
Регистрация: 11.05.2013
Сообщений: 99
13.10.2013, 14:55  [ТС]     Виртуальные методы #7
вот сам код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 #include <cstdio>
 
class Test{
public:
    virtual void Message(){
        printf("Original message\n");
    }
};
 
 
int main(){
    Test* test = new Test();
    //ВОТ ЗДЕСЬ
 
    test->Message();
    getchar();
    return 0;
}
там где написано ВОТ ЗДЕСЬ* Нужно что-то дописать что-то такое, что при вызове test->Message(); в консоль напечатается совсем другое слово. Любое, которое захочет пользователь. Или например что-то другое выполнится.
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
13.10.2013, 14:58     Виртуальные методы #8
На мой взгляд никак.
Если не прав - поправьте.
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
13.10.2013, 15:00     Виртуальные методы #9
Цитата Сообщение от Auron Посмотреть сообщение
там где написано ВОТ ЗДЕСЬ* Нужно что-то дописать что-то такое, что при вызове test->Message(); в консоль напечатается совсем другое слово. Любое, которое захочет пользователь. Или например что-то другое выполнится.
Для чего вообще механизм виртуализации? У вас есть какой-нибудь производный от Test класс хотя бы?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.10.2013, 15:00     Виртуальные методы #10
Цитата Сообщение от Auron Посмотреть сообщение
там где написано ВОТ ЗДЕСЬ* Нужно что-то дописать что-то такое, что при вызове test->Message(); в консоль напечатается совсем другое слово. Любое, которое захочет пользователь. Или например что-то другое выполнится.
Задание сами для себя придумали, или как?
Auron
2 / 2 / 0
Регистрация: 11.05.2013
Сообщений: 99
13.10.2013, 15:04  [ТС]     Виртуальные методы #11
Цитата Сообщение от gromo Посмотреть сообщение
Для чего вообще механизм виртуализации? У вас есть какой-нибудь производный от Test класс хотя бы?
производного класса нет

Добавлено через 38 секунд
Цитата Сообщение от alsav22 Посмотреть сообщение
Задание сами для себя придумали, или как?
не совсем разбираюсь с Таблицей виртуальных методов и указателями на функции
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
13.10.2013, 15:05     Виртуальные методы #12
...
Цитата Сообщение от Auron Посмотреть сообщение
производного класса нет
Цитата Сообщение от castaway Посмотреть сообщение
Auron, ответ никак.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
13.10.2013, 15:05     Виртуальные методы #13
Цитата Сообщение от Auron Посмотреть сообщение
там где написано ВОТ ЗДЕСЬ* Нужно что-то дописать что-то такое, что при вызове test->Message(); в консоль напечатается совсем другое слово. Любое, которое захочет пользователь.
Невозможное возможно:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <cstdio>
 
class Test{
public:
    virtual void Message(){
        printf("Original message\n");
    }
};
 
 
int main(){
    Test* test = new Test();
    //ВОТ ЗДЕСЬ
    struct S{
    void Message(){
        printf("Nope\n");
    }
    };
    S *s = new S;
    #define test s
 
    test->Message();
    getchar();
    return 0;
}
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
13.10.2013, 15:07     Виртуальные методы #14
Цитата Сообщение от Auron Посмотреть сообщение
производного класса нет
Тогда как вы хотите делать подмену? Виртуальная функция "подменяется" во время выполнения программы только когда указатель Test* адресует некий производный от себя класс, в котором эта виртуальная функция переопределена.
А если у вас нет подкласса, то это уже не объектно-ориентированный подход, а просто объектный. Виртуальные функции работать не будут
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
13.10.2013, 15:08     Виртуальные методы #15
Auron, создаём класс-наследник от Test с переопределенной функцией, создаём объект этого класса и делаем присваивание: test = new Test2(); готово.
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
13.10.2013, 15:09     Виртуальные методы #16
Да что ж вы тупите, он же сказал что
Цитата Сообщение от Auron Посмотреть сообщение
производного класса нет
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
13.10.2013, 15:10     Виртуальные методы #17
Tulosba, так то оно так, но вот
Цитата Сообщение от Auron Посмотреть сообщение
производного класса нет
gromo
13.10.2013, 15:10
  #18

Не по теме:

Цитата Сообщение от MrGluck Посмотреть сообщение
Невозможное возможно:

Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
13.10.2013, 15:11     Виртуальные методы #19
Ну если производного нет, то только грязные хаки как у MrGluck

Добавлено через 50 секунд
MrGluck, пока тыкал пальцем по экрану, задание скорректировали. Я не виноват :-)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.10.2013, 15:13     Виртуальные методы
Еще ссылки по теме:

Виртуальные методы C++
Наследование и виртуальные методы C++
C++ Виртуальные методы

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Auron
2 / 2 / 0
Регистрация: 11.05.2013
Сообщений: 99
13.10.2013, 15:13  [ТС]     Виртуальные методы #20
Спасибо огромное
Yandex
Объявления
13.10.2013, 15:13     Виртуальные методы
Ответ Создать тему
Опции темы

Текущее время: 10:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru