<<运算符重载,书上写的是友元函数重载,想编写成成员函数,但是报错不知道如何解决,能给我详细讲解一下ostream和cout的内部联系吗?
#include <iostream>
using namespace std;
class Point
{
public:
Point(int xx,int yy):x(xx),y(yy){}
Point& operator++();
Point& operator--();
Point operator++(int);
Point operator--(int);
ostream & operator<<(ostream &out){out<<"("<<x<<","<<y<<")"<<endl;return out;}
private:
int x;
int y;
};
Point& Point::operator++(){x++;y++;return *this;}
Point& Point::operator--(){x--;y--;return *this;}
Point Point::operator++(int){Point old=*this;++(*this);return old;}
Point Point::operator--(int){Point old=*this;--(*this);return old;}
int main()
{
Point p(3,4);
p++;cout<<p<<endl;
p--;cout<<p<<endl;
++p;cout<<p<<endl;
--p;cout<<p<<endl;
return 0;
}
按照你说的真的成功了
能再详细一点吗?理解能力不够,刚接触重载这一块,ostream和cout都是类吗?普通的自加自减还能看懂,不过<<重载确实有很多不理解的地方,在此之前都没见过ostream这个东西
Point p(3,4);
ostream cout;
cout和ostream的关系就像p和Point的关系一样,cout是ostream的一个实例,即cout是ostream类型的变量
C++ <<重载问题!
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换成...
C++中为什么重载前置++运算符要加个&?
1、因为重载自加运算符后可以返回对象的引用, 以方便在表达式中连续使用。举个例:cout<<是经常用的,其实是重载了<<这个操作符。如果不返回引用,cout<<a<<b<<endl; 就不可以一起写了。如果返回自身的引用 cout<<a之后,返回身身的引用,后面可以继续接b了。就是这个意思吧。好多重载操作符,...
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++语言<<不能重载,什么原因?
出错原因是编译系统无法识别“++<<”这种运算符,编译器以为这是一个运算符而不是两个。
c++中运算符(\\" << \\")重载ostream&是什么意思
运算符重载,是对现有操作符使用于自定义用户类型的一种扩展,但具体的性质不能变,如<<表示流操作符左侧对象为流的本质不能变,+为两元操作符本质不能变,再如,对于->重载必须返回指针类型不可变!即,即使进行运算符重载,也只是有限自由!friend ostream & operator << (ostream &os, const C...
C++重载运算符。 太TM难了。 进来看看
注:cout和cin都是C++中iostream类的一个对象,对于cout<<使用的<<运算符,是在类中被重载了的,因此<<运算符就是一个重载的操作运算符。将操作符重载函数声明为友元时,这时的操作符重载函数必须多一个形参,若操作符成员函数是类的成员函数,则要少一个形参,还有,有些操作符重载函数必须声明为...
c++求operator<<的例子
我估计是要重载流输出运算符<<,比如cout<<a;原来的形式是 operator<<(cout,a); 由于<<需要用到两个类,一个是ostream类,cout就是他的对象,是负责输出的类;另一个是用户自定义类。所以重载是应该用 友元函数 重载。如下:include <iostream>using namespace std;class Date{friend ostream& ...
c++重载运算符号
1.运算符重载定义:C++中预定义的运算符的操作对象只能是基本数据类型。但实际上,对于许多用户自定义类型(例如类),也需要类似的运算操作。这时就必须在C++中重新定义这些运算符,赋予已有运算符新的功能,使它能够用于特定类型执行特定的操作。运算符重载的实质是函数重载,它提供了C++的可扩展性,也是...
关于C++重载运算符
C++中预定义的运算符其运算对象只能是基本数据类型,而不适用于用户自定义类型(如类)(一) C++不允许用户自己定义新的运算符,只能对已有的C++运算符进行重载。(二) C++允许重载的运算符C++中绝大部分的运算符允许重载.不能重载的运算符只有5个:(1) 成员访问运算符.(2) 作用域运算符∷ (3) ...
c++中的重载运算符<<和>>为什么是只可以为友元函数,不可是成员函数?我...
如果是重载双目操作符(即为类的成员函数),就只要设置一个参数作为右侧运算量,而左侧运算量就是对象本身。。。而 >> 或<< 左侧运算量是 cin或cout 而不是对象本身,所以不满足后面一点。。。就只能申明为友元函数了。。。如果一定要声明为成员函数,只能成为如下的形式:ostream & operator<<(os...