none
一个关于成员函数重载运算符的问题 RRS feed

  • 问题

  • 源码如下:
    #include<iostream>
    using namespace std;
    class X
    {
    private:
    int x;
    public:
    X(int a=10){x=a;}
    void show(){cout<<x<<endl;}
    X operator+ (X s);
    };
    X X::operator+(X s)
    {
    X temp;
    temp.x=x+s.x;
    return temp;
    }
    void main()
    {
    X x1(20),x2(150),x3;
    x3=x1+x2;
    x3.show();
    }
    以上为程序。
    X X::operator+(X s)
    {
    X temp;
    temp.x=x+s.x;
    return temp;
    }关于这段程序
    书上说是隐含地址this 指向x。不是很明白。为什么this指针指向的是x1?this指针定义是哪个对象运行成员函数,那指针指向哪个对象。这里也没调用x1的函数啊。
    其次,X类里,x成员数据定义为私有,为什么可以调用?又不是类内调用,为什么?私有成员访问不是要定义友元函数么?
    2011年3月20日 8:32

答案

  • this指针只能在一个类的成员函数中调用,它表示当前对象的地址。

    私有成员只有在声明它的类或结构的主体中才可以访问,而你上面的访问确实是在类X的主体中


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    2011年3月21日 1:22
    版主
  • 请问你是想知道为什么

    x3=x1+x2;

    这个表达式

    调用的x1的operator+重载么?

    这是由于所有的成员函数运算副都是对该类后面的那个运算符、如果你要想实现一个前置的运算副重载。你需要写一个悠远函数来实现。

     

    私有是针对类而言的,并不是针对某个对象。所以可以访问该类的其他对象的私有变量。


    麻烦把正确答案设为解答。

    • 已标记为答案 Rob Pan 2011年3月25日 7:50
    2011年3月21日 2:18
    版主

全部回复

  • this指针只能在一个类的成员函数中调用,它表示当前对象的地址。

    私有成员只有在声明它的类或结构的主体中才可以访问,而你上面的访问确实是在类X的主体中


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    2011年3月21日 1:22
    版主
  • 请问你是想知道为什么

    x3=x1+x2;

    这个表达式

    调用的x1的operator+重载么?

    这是由于所有的成员函数运算副都是对该类后面的那个运算符、如果你要想实现一个前置的运算副重载。你需要写一个悠远函数来实现。

     

    私有是针对类而言的,并不是针对某个对象。所以可以访问该类的其他对象的私有变量。


    麻烦把正确答案设为解答。

    • 已标记为答案 Rob Pan 2011年3月25日 7:50
    2011年3月21日 2:18
    版主