class Receiver:public Task
{
...
private: //override
long Process();
private:
...
};
long Receiver::Process()
{
...
}
class Task{
...
private:
...
virtual long Process()=0;
...
};
inline Task * Task::TaskExec(Thread *ThisThread)
{
...
long l_retval =-10000;
...
try{l_retval =Process();}catch(...){} // ?
...
}
Не понимаю как вызывается функция Receiver::Process() в проекте. Искал через (ctrl+shift+f), нашел только использование в Task::TaskExec(). Разве можно вызывать функцию Process(), которая виртуальная(=0)?
Примерно так (см. комментарии). Более-менее понятно или нужно пояснять подробнее?
class Base
{
public:
virtual void vf() = 0;
void func()
{
// Здесь вызывается vf() КОНКРЕТНОГО класса, с
// использованием т.н. позднего связывания
vf();
}
};
class Derived: public Base
{
public:
// Перекрытая виртуальная функция
void vf()
{
cout << "In Derived\n";
}
};
int main()
{
// Здесь b, будучи указателем на Base, указывает на объект Derived
Base * b = new Derived;
// Вступает в игру позднее связывание. В вызове func выясняется,
// на что именно указывает b, и внутри вызывается vf() этого объекта.
b->func();
}
Кстати, чисто виртуальная функция может иметь тело и быть вызываема:
class Base
{
public:
virtual void vf() = 0
{
cout << "In Base\n";
}
void func()
{
vf();
}
};
class Derived: public Base
{
public:
virtual void vf()
{
Base::vf();
cout << "In Derived\n";
}
};
int main()
{
Base * b = new Derived;
b->func();
}
Топ-20 лучших университетов мира по IT и программированию – Образование за границей
Здравствуйте! С обычным квадратом все просто, но как в него засунуть поменьше квадрат, вот это проблемка
Весь мозг поломал, перечитал все об указателях и так и не понял как сделать этот код работоспособнымКак прямо сказать циклу что я ему подсовываю...
Стоит задача реализовать в приложении на C++ потоковое видео (для браузеров), дали направление - WebMНа официальном сайте куча репозиториев (кодеки,...
Всем приветМне необходимо работать в Астра-Линукс и разрабатывать в нем приложения