![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 02.10.2009
Сообщений: 255
|
![]()
Почему не работает код:
#include <iostream> using namespace std; class Mammal { public: Mammal():itsAge(1){ } virtual ~Mammal(){ } virtual void Speak() const=0; virtual void Move() const=0; protected: int itsAge; }; class Dog: public Mammal { public: void Speak() const{cout << "Woof!" << endl;} void Move() const{cout << "Walking to heel..." << endl;} }; class Cat: public Mammal { public: void Speak() const{cout << "Meow!" << endl;} void Move() const{cout << "slinking..." << endl;} }; class Horse: public Mammal { public: void Speak() const{cout << "Whinny!" << endl;} void Move() const{cout << "Galloping..." << endl;} }; int main() { void (Mammal::*pFunc)()const=0; Mammal * ptr=0; int Animal; int Method; bool fQuit=false; while(fQuit==false) { cout << "(0)Quit (1)dog (2)cat (3)horse: "; cin >> Animal; switch(Animal) { case 1: ptr=new Dog; break; case 2: ptr=new Cat; break; case 3: ptr=new Horse; break; default: fQuit=true; break; } if(fQuit) break; cout << "(1)Speak (2)Move: "; cin >> Method; switch(Method) { case 1: pFunc=Mammal::Speak; break; default: pFunc=Mammal::Move; break; } (ptr->*pFunc)(); delete ptr; } } Выдаёт такие ошибки: program122.cpp: В функции ‘int main()’: program122.cpp:63:22: ошибка: некорректное использование нестатической функции-элемента ‘virtual void Mammal::Speak() const’ program122.cpp:64:23: ошибка: некорректное использование нестатической функции-элемента ‘virtual void Mammal::Move() const’ ![]() ![]() ![]()
"Реальность воображаема, а воображаемое - реально" В. Соло
|
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 02.01.2011
Сообщений: 3,328
|
![]()
Сейчас работает.
Код:
|
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 02.10.2009
Сообщений: 255
|
![]()
Да, все заработало, но у меня ещё один вопрос, почему тогда знак амперсанда не нужен в случаи кода создаётся ссылка на функцию.
Например: long Func(int); { } long(*pFunc)(int); pFunc=Func;
"Реальность воображаема, а воображаемое - реально" В. Соло
|
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,821
|
![]()
Имя функции, имя массива, имя объекта... фактически являются указателями на...
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Виртуальные функции-операции и friend'ы | megachuhancer | Общие вопросы C/C++ | 5 | 11.03.2011 15:38 |
ВИРТУАЛЬНЫЕ ФУНКЦИИ в Delphi | MaxMad | Помощь студентам | 0 | 30.05.2010 20:06 |
Виртуальные функции | bigory | Помощь студентам | 2 | 06.06.2009 22:44 |
НАСЛЕДОВАНИЕ И ВИРТУАЛЬНЫЕ ФУНКЦИИ С++ | ermac52 | Помощь студентам | 1 | 05.06.2009 11:03 |
Одиночное наследование Виртуальные функции | Brunette | Помощь студентам | 3 | 08.05.2008 19:23 |