This is my situation:
class Filter3by3 {
public:
   virtual inline Mat convolution((Mat & mat, int i, int j, int rows, int cols) { 
 code
   }
};
class MySobel: public Filter3by3 {
public:
  inline Vec3b convolution(Mat & mat, int i, int j, int rows, int cols) {
    code
  }
};
Now, when I call:
Filter3by3 f = choose_filter(filtername); // Returns a Sobel filter
Mat mat;
s.convolution(args);
The base class method is called. I am quite newbie at c++ method binding rules, so can you tell me where I am wrong? I appreciate your help.
UPDATE It appears that even with virtual inline Mat convolution((Mat & mat, int i, int j, int rows, int cols) It does not work.
This is a running program, compiled with g++ -std=c++11
#include <iostream>
using namespace std;
class Filter {
public:
  Filter() { }
  virtual int ehi() {
    cout << "1" << endl;
    return 1;
  }
};
class SubFilter : public Filter {
public:
  SubFilter() : Filter() { }
  int ehi() {
    cout << "2" << endl;
    return 2;
  }
};
  Filter choose_filter(){
    SubFilter f;
    return f;
  }
  int main(int argc, char* argv[]) {
     Filter f = choose_filter();
     f.ehi();
     return 0;
  }
It prints 1 instead of 2. I used virtual to ensure dynamic binding, but it does not seem to be enough, also with "override" keyword.
 
     
     
    