Как присмотреть за конструктором? - PullRequest
4 голосов
/ 07 мая 2019

Я немного новичок в C ++, и у меня возникла эта проблема, когда я узнал об этом

Итак, я создал этот класс

class A {
    int num;
public:
    //constructor
    A(int num) {
        this->num = num;
    }
    int getNum() {
        return num;
    }
    //overload <<
    friend ostream& operator << (ostream& os,A& a) {
        os << a.getNum();
        return os;
    }
};

В основной функции, если я использую cout<< A(1);, она компилируется неправильно (код C2679 в Visual Studio 2017).
Как я могу сделать это как cout<< int(1);? Нужно ли перегрузить любого другого оператора?

Ответы [ 2 ]

4 голосов
/ 07 мая 2019

Ваша перегрузка должна занять const A&, в противном случае анонимный временный A(1) не может связываться с ним.

1 голос
/ 07 мая 2019

Еще один способ - перегрузить operator << с помощью rvalue references

friend ostream& operator << (ostream& os, A&& a) {        
        os << a.getNum();
        return os;
    }
...