1。操作符  .*  和  .?  是干什么用的?
2。()和[]怎么重载啊?
最好举个例子

解决方案 »

  1.   

    你不如举个例子让大家来重载的好;比如
    int& IntList::operator[](int i) {
    assert((i >= 0) && (i < size()));
    return Values[i];
    }
    这个是IntList里面的[]重载。
    另外问一下。gz是什么意思……:PP
      

  2.   

    操作符.*没见过,?:我举个例子吧
    int a,b,c,d;
    a=3;
    b=4;
    c=5;
    d=(a<3)?b:c;
    结果d被赋值为5;
    ?前为条件表达式,?后为前面条件表达式值为真的时候应用的结果表达式,:后为条件表达式为假的时候应用的条件表达式,也就是说:号前后可以为b+3等这样的表达式,UNDERSTAND?
      

  3.   

    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa()如何重载 啊?????????????????
      

  4.   

    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa()如何重载 啊?????????????????
      

  5.   

    唉,随便来一个类吧,只为说明“()”的重载,也附带测试程序(需要用到MFC)#include "afxwin.h"
    #include "stdio.h"
    class ClassEg
    {
    private:
         int key1;
         int key2;
    public:
    ClassEg(){key1=1;key2=2;}
    ~ClassEg(){}
        operator CPoint();
    };
     ClassEg::operator CPoint()
    {
         CPoint point;
         point.x=key1;
         point.y=key2;
         return point;
    }
    main()
    {
    ClassEg  eg;
    CPoint point=CPoint(eg);
    printf("(%d,%d)",point.x,point.y);
    }
      

  6.   

    程序正确
    可我没怎么看懂
    ClassEg::operator CPoint();
    .....
    CPoint point=CPoint(eg);
    看不明白。
    这里的()是函数调用运算符么?
    能否再给个例子?
    谢谢各位了
      

  7.   

    这就是所谓的强制类型转换,我把自定义类ClassEg的对象强制转换成了
    MFC类CPoint,因为系统内部没有这两个类之间的强制转换机制,所以必须
    自己来重载强制转换函数,这里的()是强制转换运算符,更精确的语句
    表达是这样的:    CPoint   point=(point)eg;//这里是把eg对象附值给CPoint类型的point,这里是要进行类型转换的
    或者也可以这样表达:
        CPoint   point=eg;
      

  8.   

    Class A
    {
    int i;
    };void main()
    {
    int A::*p=A::i;A a;a.*p=100;//p是指向对像成员数据的指针,相当于把100赋给i
    }
      

  9.   

    那不是一个操作符,而是二个.
    如class A
    {
    public:
       int *p_Int;
    ...
    }A* ptr=new A();
    ptr->*p_int;你不会认为
     a+(b+c)中的+(也是一个操作符吧!
      

  10.   

    Zkar的例子好像一般不那么用,一般用法是:
    class A
    {
    public:
       int *p_Int;
    ...
    }A* ptr=new A();
    *(ptr->p_int);
      

  11.   

    对不起,看错了,是microsoftwin(流星雨点) 的不行那个是一个还是两个操作符的问题要看个人理解了,不过我看书上写是一个有没有重载函数调用运算符()的例子啊?其他我看看先
      

  12.   

    .*和->*我都用不了
    只能这么用:
    void func(){cout<<"fds";};
    class A
    {
    public:
       void (*p)();
       A(){p= func;};
       ~A(){}
    };main()
    {
    A s;
    A *t=new A;
    (*t->p)();
    (*s.p)();
    delete t;
    return 0;
    }为什么???
      

  13.   

    a^b是指a的b次方
    a^=b是指a的b次方再赋值给a操作符里除了.     .*    ::    ?:
    都能重载***************************************************************
    ***************************************************************
    谁能回答我的问题啊?
    有没有重载函数调用运算符()的例子?
    .*和->*如何用?
    ***************************************************************
    ***************************************************************
      

  14.   

    .* 和 ->*
    Pointer to member operators,指向成员的指针操作符。class .* pMember
    class为类,pMember为指向类成员的指针。通过上式可以达到访问类成员的目的,如调用类成员函数:
    (CObject.*pMemberFunc)(10);
    其中CObject是类,pMemberFunc为指向成员函数的指针。同理,如果有一个指向类的指针pObject,则:
    (pObject->*pMemberFunc)(10);
      

  15.   

    template<typename T>
    class GreatThan : public binary_function<T,T,bool>
    {
    ....
    bool operator () (const T& t1 , const T& t2) const
    {
    return t1 > t2 ;
    }
    };
    main:
    sort(vec_int.begin (),vec_int.end (),GreatThan<int>());