strategy pattern in C++

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

class Sort {
public:
    virtual void sort() const = 0;
};

class MergeSort: public Sort {
public:
    void sort() const {
        cout << "MergeSort()\n";
    }
};

class QuickSort: public Sort {
public:
    void sort() const {
        cout << "QuickSort()\n";
    }
};

class Context 
{
    Sort* m_sort;
public:
    void setSort(Sort* s){
        m_sort = s;
    }
    void sort() const {
        m_sort->sort();
    }
};


int main(int argc, char *argv[])
{
    MergeSort mergeSort;
    QuickSort quickSort;

    Context context;
    context.setSort(&mergeSort);
    context.sort();

    return 0;
}
```