将此传递给重载<<操作者

时间:2017-01-18 23:07:41

标签: c++ operator-overloading this

如何在c ++类中将this传递给operator<<?或者我只是做错了(可能)。

例如,在下面的类中,我只有一个重复请求的循环并打印一个整数。但是,cout<<this只打印实例的地址,但我想使用定义的运算符重载。

#include<iostream>
using std::cout; using std::endl; using std::cin;

class C {
  int n;
 public:
  C(int n) : n(n) {};
  friend std::ostream& operator<<(std::ostream&, const C&);
  void set_n(int i) { n = i; }
  void play() {
    int input;
    while (true) {
      cout << this;
      cin >> input;
      set_n(input);
    }
  }
};

std::ostream& operator<<(std::ostream& os, const C& c) {
  cout << c.n << "\n";
  return os;
}

int main(int argc, char *argv[]) {
  C c = C(1);
  c.play();
  return 0;
}

2 个答案:

答案 0 :(得分:5)

this是一个指针。你需要

cout << *this;

此外,您对operator<<的定义可能应使用参数os,而不是始终使用cout

答案 1 :(得分:1)

this是一个指针。您可能需要取消引用它。

cout << *this;