Sandwich shop interface using the Decorator pattern
No:

An object "Sub" and a decorator "Topping" implement the same interface. 
In addition a decorator takes an item (of the same interface) that it is decorating.
This is not quite what you have done.

What if I want extra cheese and meat?

You need something more like this:

class Price
{
    public:
       virtual     ~Price()   = 0;
       virtual int getPrice() = 0;
};

class Sub: public Price
{
    public:
        int getPrice() override {return 375;}
};

class ExtraCheese: public Price
{
    std::unique_ptr&lt;Price&gt;   item
    public:
        ExtraCheese(std::unique_ptr&lt;Price&gt;&amp;&amp; item)
             : item(std::move(item))
        {}
         int getPrice() override {return item-&gt;getPrice() + 25;}
};

int main()
{
    std::unique_ptr&lt;Price&gt;   sub(new Sub);
    std::unique_ptr&lt;Price&gt;   subCheese(new ExtraCheese(sub));
    std::unique_ptr&lt;Price&gt;   subCheeseMeat(new ExtraMeat(subCheese));

    std::cout &lt;&lt; subCheeseMeat-&gt;getPrice();
}