Base* b = new Derived();
Base
- наследник Derived()
. Если у обоих этих классов есть функция print()
, и мы заходим ее вызвать от *b
, то вызовется функция определенная для Base
, хотя мне нужна функция класса наследника. Я знаю, что такое можно починить сделав print()
в Base
виртуальной и написав override
у функции наследника, однако если я собираюсь перегрузить operator<<
для обоих классов, то этот способ использовать не получится, какие есть варианты справится с этой проблемой?
Например, ваш оператор <<
вполне может вызывать виртуальную функцию print
, правда? :)
struct Base
{
virtual void print(ostream&os) const { os << "Base\n"; }
};
struct Derived: public Base
{
void print(ostream&os) const override { os << "Derived\n"; }
};
ostream& operator << (ostream& os, Base& b)
{
b.print(os);
return os;
}
int main(int argc, const char * argv[])
{
Base* a = new Base();
Base* b = new Derived();
Base c;
Derived d;
cout << *a << *b;
cout << c << d;
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
что нужно написать в цикле чтобы перевести каждый элемент стринга в инт и прибавить его в 'c'
Как вывести совпадения для пользователя -user_i = 1Нужно вывести пользователей, которых лайкнул пользователь 1 и те пользователя, которые лайкнули...