c++ 运算符重载 你懂的,不说话

来源:互联网 发布:匿名飞控c语言源码讲解 编辑:程序博客网 时间:2024/04/29 20:55
这段代码包含了大部分c++运算符重载的小知识。你懂的
struct foo{    foo(){        std::cout<<__FUNCTION__<<"()"<<std::endl;    }    foo(int x){        std::cout<<__FUNCTION__<<"(int)"<<std::endl;        data = x;    }        foo(const foo & rhl){        std::cout<<__FUNCTION__<<"(const foo &)"<<std::endl;        data = rhl.data;    }    void operator = (const foo & rhl){        std::cout<<__FUNCTION__<<"(const foo &)"<<std::endl;        data = rhl.data;    }    void operator = (int data){        std::cout<<__FUNCTION__<<"(int)"<<std::endl;        this->data = data;    }    int operator()(){        std::cout<<__FUNCTION__<<std::endl;        return data;    }    int operator()(int data){        std::cout<<__FUNCTION__<<"(int)"<<std::endl;        return data;    }    int operator[](int index){        std::cout<<__FUNCTION__<<"(int)"<<std::endl;        return data;    }    int operator[](float index){        std::cout<<__FUNCTION__<<"(float)"<<std::endl;        return data;    }        int operator[](double index){        std::cout<<__FUNCTION__<<"(double)"<<std::endl;        return data;    }        operator int () const{        std::cout<<__FUNCTION__<<std::endl;        return data;    }        int operator + (int d)const {        std::cout<<__FUNCTION__<<std::endl;        return data + d;    }        int operator ++(int){        std::cout<<__FUNCTION__<<"(int)"<<std::endl;        data++;        return data;    }    int operator ++(){        std::cout<<__FUNCTION__<<"()"<<std::endl;        ++data;        return data;    }    friend std::ostream & operator << (std::ostream & io, foo & rhl) {        std::cout<<__FUNCTION__<<"(std::ostream & io, foo & rhl)"<<std::endl;        return io;    }    int operator << (int data) {        std::cout<<__FUNCTION__<<"(int data)"<<std::endl;        return data;    }    int data;};int main(int argc, _TCHAR* argv[]){    foo bar = 10;    foo cat = bar;    int a = bar + 1;    int b = 1 + bar;    ++bar;    bar++;    cat();    cat(1);    bar = cat;    bar = 1;    bar[1];    bar[3.14f];    bar[3.14];    std::cout<<bar;    bar<<1;    return 0;}

output:

foo::foo(int)
foo::foo(const foo &)
foo::operator +
foo::operator int
foo::operator ++()
foo::operator ++(int)
foo::operator ()
foo::operator ()(int)
foo::operator =(const foo &)
foo::operator =(int)
foo::operator [](int)
foo::operator [](float)
foo::operator [](double)
operator <<(std::ostream & io, foo & rhl)
foo::operator <<(int data)

Press any key to continue . . .

原创粉丝点击