С++ Приведение объекта класса наследника к базовой части

Что нужно изменить в этом коде, чтобы это заработало? K[i] - это Kaloda, нужно её както привести к типу IFormattable&

void prettyPrint(const IFormattable& object)
{
    cout << object->format();
}

void KolodasInfo()//Информация о колодах
{
    cout << "Колоды: \t";
    for(int i = 0; i < 4; i++) prettyPrint(K[i]);
    cout << endl;
}

Классы:

class IFormattable
{
    public:
    
    virtual string format() {return "";}
};

class Koloda:IFormattable
{
    public:

    int size;

    virtual string format() {
        string str = "[";
        str.append(to_string(size));
        str.append("]");
        return str;
    }
}

Ответы (1 шт):

Автор решения: Harry

Посмотрите на все изменения по сравнению с вашим кодом (включая const, . вместо ->...), и постарайтесь понять, почему они сделаны. Если уж совсем самостоятельно не получится — спрашивайте...

class IFormattable
{
    public:
    
    virtual string format() const {return "";}
};

class Koloda: public IFormattable
{
    public:

    int size;

    virtual string format() {
        string str = "[";
        str.append(to_string(size));
        str.append("]");
        return str;
    }
};


void prettyPrint(const IFormattable& object)
{
    cout << object.format();
}

void KolodasInfo()//Информация о колодах
{
    cout << "Колоды: \t";
    for(int i = 0; i < 4; i++) prettyPrint(K[i]);
    cout << endl;
}
→ Ссылка