我要重载一个类的等号运算,使得能够进行像下面这样的操作:
  int iVal = Obj;我本来想这样写,(用全局函数)
int operator=(int iVal,CObj obj)
{
   //....
}可编译老是有错,怎么搞的?

解决方案 »

  1.   

    像这样的为什么要用运算符重载?好像一般运算符重载只能针对一个类的吧,你写全局函数的形式是什么意思?你想将所有对int的复制都转换成你的对象吗?我想C++肯定不允许你这样做,我建议你可以在这个类中定义一个成员函数,返回值是int型不是更好理解吗?或则你再看一下C++语言中关于操作符重载的内容。
      

  2.   

    重载一般是对类这样的参数进行重载,不能重载int这样的类型吧,如果你要重类中获取一个值,可以这样写:
    int iVal=Obj.GetValue();
    如果你想重载=,应该如下:
    CYourClass newClass=Obj;函数可以写成
    h:
    CYourClass operator=(CYourClass obj);
    cpp:
    CYourClass ::operator=(CYourClass obj)
    {
    this.a=obj.a;
    this.b=obj.b;
    //.....
    //相当于把所有的变量初始化一遍
    }
      

  3.   

    写成一个 conversion 运算符:int operator int() const
    {
        ...
    }
      

  4.   

    int 不是类内型, 他是结构类型。结构类型通过拷贝进行
      

  5.   

    我的意思是写成 CObj 的 conversion 运算符:class CObj {
        int operator int() const
        {
            ...
        };
    };这样就可以通过:CObj obj;
    int i = obj;
      

  6.   

    不允许这样???
    但是像
    int operator+ (int iVal ,CObj obj)
    {
      //...
    }
    就没有问题呀?
      

  7.   

    In355Hz(好象一条狗) :
        你说的有道理,,,,!~~不过,为什么operator=不可以呢?
      

  8.   

    operator= 规定没有全局形式吧,一般的形式为:some_class& operator= (other_type source)
    some_class& operator= (const some_class& source)
      

  9.   

    ()、[]、->和= 不允许重载成非成员函数,也就是说要想重载这几个符必须在类内部重载,详见<<C++大学教程>>第8章.
      

  10.   

    The following operators can only be overloaded in class scope as nonstatic members:
     assignment operator '=', class member access operator '->', subscripting operator '[]', and function call operator '( )'.