重载C++插入运算符(<<)
问题描述:
我想写一个重载插入运算符但在我的头文件中出现错误的类。重载C++插入运算符(<<)
Overloaded 'operator<<' must be a binary operator (has 3 parameters)
这里是我的代码:
.h文件中
ostream & operator<<(ostream & os, Domino dom);
.cpp文件
ostream & operator<< (ostream & os, Domino dom) {
return os << dom.toString();
}
我下面的文字书,这就是他们的使用一个例子,但它不适合我..任何建议?
答
您可能会将您的operator<<
放入类声明中。这意味着它需要一个额外的隐藏参数(this
参数)。你需要把它放在任何类声明之外。
答
插入运算符(< <)可以用作成员函数或朋友函数。如果您使用的是运营商为成员函数
dom << cout;
一般而言,左起:
操作< <用作成员函数
ostream& operator<<(ostream& os);
这个函数被调用为操作员的手边应该是一个物体。然后,该对象作为参数隐式传递给成员函数。但是调用混淆了用户,它看起来不太好。
cout << dom;
在这种情况下,对象dom
作为参考被明确地传递:
操作者< <用作朋友函数
friend ostream& operator<<(ostream& os, const Domino& obj);
此功能应当被调用。这种调用比较传统,用户可以很容易地理解代码的含义。
答
/*insertion and extraction overloading*/
#include<iostream>
using namespace std;
class complex
{
int real,imag;
public:
complex()
{
real=0;imag=0;
}
complex(int real,int imag)
{
this->real=real;
this->imag=imag;
}
void setreal(int real)
{
this->real=real;
}
int getreal()
{
return real;
}
void setimag(int imag)
{
this->imag=imag;
}
int getimag()
{
return imag;
}
void display()
{
cout<<real<<"+"<<imag<<"i"<<endl;
}
};//end of complex class
istream & operator >>(istream & in,complex &c)
{
int temp;
in>>temp;
c.setreal(temp);
in>>temp;
c.setimag(temp);
return in;
}
ostream &operator <<(ostream &out,complex &c)
{
out<<c.getreal()<<c.getimag()<<endl;
return out;
}
int main()
{
complex c1;
cin>>c1;
// c1.display();
cout<<c1;
//c1.display();
return 0;
}
+0
插入提取重载而不使用好友功能 – 2016-09-01 03:36:40
是不是所谓的“按位左移运算符”? – SigTerm 2012-02-01 04:31:52
如果不是那么大,你能否用整个代码更新这个问题? – 2012-02-01 04:50:50
'operator 2016-09-01 03:38:43