С++ Приведение объекта класса наследника к базовой части
Что нужно изменить в этом коде, чтобы это заработало? 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;
}