2013-11-23 3 views
1

В заголовке:виртуальный оператор int() (int k);

#include <iostream> 
#include <vector> 
using namespace std; 

template<class Key> 
class HashFunction{ 
public: 
    int N; 
    virtual int operator()(Key k)=0; 
}; 

class MyHashFunction : public HashFunction <int> { 
public: 
    virtual int operator()(int k); 

}; 

затем в файле CPP:

#include "Hash classes.h" 

int MyHashFunction::operator()(int k){ 
    return k% this->N ; 
} 

Может кто-нибудь объяснить этот синтаксис пожалуйста: оператор виртуальной Int() (Key к) = 0; Я понимаю виртуальные методы и «= 0» и какие шаблоны ... в общем, но мне трудно понять, что означает этот «int operator() (Key k)», а затем как он используется в cpp файл, у меня до сих пор не так много опыта использования этих понятий в C++, поэтому синтаксис довольно раздражает

Спасибо за ваше время, очень ценим.

+1

Эта особенность C++ под названием "перегрузка оператора". 'operator()' (операторные скобки) в этом случае. Google это для дальнейшей информации. – Drop

ответ

1

Вы определяете оператор() для объекта MyHashFunction, что означает, что вы можете вызвать экземпляр, как будто она является функцией.

Например

MyHashFunction myHashFunctionInstance; 
myHashFunctionInstance(20); //Call the operator() 
0

Это просто виртуальная версия перегруженного оператора функциональных вызовов, то есть () -оператор.

Например:

void foo(Base const & x) 
{ 
    int n = x(1, 2, 3); // calls int Base::operator()(int, int, int), 
          // which may be virtual and dispatched dynamically 
} 
Смежные вопросы