Как мы можем реализовать функцию ostream в качестве функции-члена класса, а не в качестве функции-друга, чтобы я мог использоваться в качестве виртуальной функции? - PullRequest
0 голосов
/ 18 мая 2019

Я хочу отобразить детали объекта производного класса, используя друга ostream и функцию базового класса. Как мы можем это сделать? Как я могу сделать функцию-член, а не функцию-член класса, чтобы ее можно было использовать как виртуальнуюфункция и для отображения деталей объекта производного класса.

1 Ответ

0 голосов
/ 18 мая 2019

Вкладчик потока принимает поток в качестве первого аргумента, поэтому, когда вставщик является функцией-членом, он является членом класса потока, а не класса, который вы пишете.Так что это не может быть виртуальной функцией в вашем классе.Но он может вызвать виртуальную функцию в вашем классе.

class my_class {
    virtual std::ostream& put(std::ostream& out) const {
        out << "here we go!\b";
    }
friend std::ostream& operator<<(std::ostream& out, const my_class& my_object);
};

std::ostream& operator<<(std::ostream& out, const my_class& my_object) {
    my_object.put(out);
}
...