C ++ 0verloading运算符 [英] c++ 0verloading operators
本文介绍了C ++ 0verloading运算符的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在查看一些有关运算符重载的在线教程/示例.他们提供的信息非常丰富,但是我正在寻找一些与众不同的东西.
这些教程有:
Hi,
I was looking over some online tutorials/examples on operator overloading. They where very informative but I was looking for something a little different.
The tutorials had:
#include<iostream.h>
#include<fstream.h>
class ThreeD
{
int x,y,z;
public:
ThreeD(int i,int j,int k){
x=i;
y=j;
z=k;
}
friend istream& operator>>(istream& stream,ThreeD ob);
};
istream& operator>>(istream& stream,ThreeD ob)
{
stream>>ob.x>>ob.y>>ob.z;
return stream;
}
main()
{
ifstream in("test");
ThreeD o3(0,0,0),o4(0,0,0);
in>>o3>>o4;
return 0;
}
但我想知道您是否可以做更多类似的事情:
but I was wondering if you could do something more like:
ThreeD o3;
o3 >> 0 >> 20 >> 6;
我知道STL为此提供了一个类.我想知道是否可以通过这种方式完成
I know STL has a class for this. I want to know if it can be done this way
推荐答案
ThreeD o3;
o3 >> 0 >> 20 >> 6;
意味着您将定义一个运算符,例如:
Would mean you defined an operator something like:
ThreeD& operator>> (ThreeD &obj, int x)
{
// What do you want to do here???
return obj
}
你真的是说:
Do you actually mean:
ThreeD o3;
o3 << 0 << 20 << 6;
在这种情况下,您将定义如下内容:
In which case you''d define something like:
class ThreeD
{
int x,y,z;
int last;
public:
ThreeD() {
x = y = z = 0;
last = 0;
}
ThreeD(int i,int j,int k){
x=i;
y=j;
z=k;
last = 3;
}
friend ThreeD& operator>>(ThreeD& obj,int i);
};
ThreeD& operator>>(ThreeD& obj, int i)
{
switch (obj->last) {
case 0: obj->x = i; break;
case 1: obj->y = i; break;
case 2: obj->z = i; break;
default:
throw "Already got three numbers can''t input any more!";
}
obj->last++;
return obj;
}
这篇关于C ++ 0verloading运算符的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文