C ++ 0verloading运算符 [英] c++ 0verloading operators

查看:109
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆