C++ <<重载问题!

写了一个小程序,用于重载<<,可是编译错误,却怎么也找不出来哪里错了。麻烦各位高手帮忙看看~谢谢了:
#include <fstream >
#include "iostream"
using namespace std;
class Point
{
private:
int px,py;
public:
Point(int x=0, int y=0) { px=x;py=y;}
friend void operator <<(ostream x,Point &pt); //重载"<<"运算符的函数声明
};

void operator <<(ostream x,Point &pt) //重载"<<"运算符的函数头
{
cout<<pt.px<<pt.py<<endl;
}
void main()
{
Point p1(1,2);
cout<<p1;
}
命名将重载定义为友元函数了,却编译说没有权限访问类的私有变量额
E:\VC++实验\temp console\temp.cpp(15) : error C2248: 'px' : cannot access private member declared in class 'Point'
E:\VC++实验\temp console\temp.cpp(7) : see declaration of 'px'
E:\VC++实验\temp console\temp.cpp(15) : error C2248: 'py' : cannot access private member declared in class 'Point'
E:\VC++实验\temp console\temp.cpp(7) : see declaration of 'py'

第1个回答  推荐于2016-09-08
#include <fstream.h >
#include <iostream.h>

class Point
{
private:
int px,py;
public:
Point(int x=0, int y=0) { px=x;py=y;}
friend ostream& operator<<(ostream &x,Point pt); //重载"<<"运算符的函数声明 //把void换成ostream&
};

ostream& operator <<(ostream &x,Point pt) //重载"<<"运算符的函数头 //把void换成ostream&
{
x<<"("<<pt.px<<","<<pt.py<<")"<<endl; //这里有错
return x;
}
void main()
{
Point p1(1,2);
cout<<p1;
}
现在可以了本回答被提问者采纳
第2个回答  2019-10-22
一楼的代码中count变量应该放在类的私有变量里,这样调用++操作符才有意义。
另外注意重载++操作符:当++操作符在变量前面时,即前缀操作符(++var),重载函数不带参数;而当++为后缀操作符时(var++),重载参数必须带一个int型变量,此变量没有什么意义,只是起到说明、区别而已,而且必须是int型!
第3个回答  2010-01-13
#include <fstream >
#include "iostream"
using namespace std;
class Point
{
private:
int px,py;
public:
Point(int x=0, int y=0) { px=x;py=y;}
friend void operator <<(ostream& x,Point &pt); //重载"<<"运算符的函数声明
};

void operator <<(ostream& x,Point &pt) //重载"<<"运算符的函数头
{
cout<<pt.px<<pt.py<<endl;
}
void main()
{
Point p1(1,2);
cout<<p1;
}
对ostream加个引用就行了。编译器提示的错有毛病
因为ostream类没有复制构造函数,所以ostream&传参时必须是引用。

一般重载流输出操作的格式如下:
ostream& operator <<(ostream& x,Point &pt) //重载"<<"运算符的函数头
{
x<<pt.px<<pt.py<<endl; //cout也行
}
返回值一般是ostream&,原因是如果返回为void则不能实现连续输出。
即cout<<p1<<endl;会出错。
第4个回答  2019-09-06
不知道这样子是否能符合您的要求,还望采纳,呵呵~~

#include
<cstdio>
#include
<cstdlib>
class
C
{
public:

int
count;

C(){count=0;}

C(int
c):count(c)
{}

int&
operator++()

{

return
++count;

}

int
operator++(int)

{

return
count++;

}
};
int
main()
{

C
c;

printf("%d\n",++c);

C
d;

printf("%d\n",d++);

system("pause");

return
0;
}
第5个回答  2010-01-13
ostream &operator <<(ostream &x,Point &pt) //重载"<<"运算符的函数头
{
return x<<pt.px<<pt.py<<endl;
}

试试,友元的声明也要改一下

C++ <<重载问题!
{ private:int px,py;public:Point(int x=0, int y=0) { px=x;py=y;} friend ostream& operator<<(ostream &x,Point pt); \/\/重载"<<"运算符的函数声明 \/\/把void换成ostream& };ostream& operator <<(ostream &x,Point pt) \/\/重载"<<"运算符的函数头 \/\/...

c++语言<<不能重载,什么原因?
出错原因是编译系统无法识别“++<<”这种运算符,编译器以为这是一个运算符而不是两个。

C++运算符重载,+-*\/的重载,返回值为什么是对象而不是对象的引用?而流操...
原因是:+,-,*等返回不了引用,比如+运算符,可以如下重载(为了简单,假设A 只有int x;int y)A operator+(A a,A b) {A sum; sum.x=a.x+b.x; sum.y=a.y+b.y; return sum; } 分析不能用引用的原因: 函数传入了两个参数a,b,并且+只能传入两个参数(c++不允许自己创...

C++中为什么重载前置++运算符要加个&?
cout<<是经常用的,其实是重载了<<这个操作符。如果不返回引用,cout<<a<<b<<endl; 就不可以一起写了。如果返回自身的引用 cout<<a之后,返回身身的引用,后面可以继续接b了。就是这个意思吧。好多重载操作符,作用其实都是这样的。2、引用是C++引入的新语言特性,是C++常用的一个重要内容之一,...

为什么C++操作符<<重载老是提示:operator <<' is ambiguous
<<和>>的重载必须作为类的友元函数,不能作为成员函数.所有应该在你的mycomplex类中,加上friend ostream& operator<<(ostream &os, mycomplex &second);的声明,然在在.cpp文件中实现该函数就可以了.

C++中小于号重载是什么意思?
对于用户自定义类型,要进行大小比较,必须重载<号,不然两个对象如何比较大小啊,例如一个表示学生的记录,可能包括学生姓名和学号,当你比较两个学生时,到底是依他们学号进行比较呢还是姓名的字典顺序呢?你得说清楚 吧

c++重载问题
重载前增后增是有区别的 后增参数必须有一个int值,任何值都 可以,只要是int就行 目的是区别前增与后增 试想这样你能区分出哪个是前哪个是后 COpertor& COpertor::operator++()COpertor& COpertor::operator++()COpertor COpertor::operator++(int){ cout<<"COpertor::opertor++(int ):"...

c++重载的问题,请高手回答
后者是--号在后面,需要返回减之前的值,但是同时也要对源对象进行减操作,但你如果在减之前就直接返回的话,就没法进行减操作了,所以只好先创建一个跟源对象一样的对象,然后对源对象减,然后返回创建的对象。返回值是对象时有个拷贝的过程,会把内部的对象拷贝一份到外部的无名对象中,不会出错。

C++重载的问题
B 友元运算符,所以不是成员函数 通过.访问的全都不是

求助,关于一道C++函数重载的问题
1、运算符重载不改变操作符原先的优先级、结合性和操作数数目,++是单目操作符,所以1不会成立的。你有这样的问题大概是因为双目操作符比如*,可以有x.operator*(y)这种写法吧? 但是这个不改变*是二目操作符的事实。C++规定:双目操作符重载作为成员函数时只能有一个形参,调用方为左操作数,形参...

相似回答