这是一个拷贝构造函数的定义:(x,y为私有成员)
ponit::point(point &p)
{x=p.x;
 y=p.y;
}
不是说不能通过对象名引用私有成员吗 这里怎么可以这样引用啊啊

解决方案 »

  1.   

    着不是拷贝构造函数是什么啊???你看源程序啊
    class point
    {private:
            int x,y;
     public:
            point(int xx=0,int yy=0){x=xx;y=yy;}
            point(point &p);
            int get_x() {return x;}
            int get_y() {return y;}
    };
    point::point(point &p)
    {x=p.x;
     y=p.y;
    }
    请问怎么可以这样调用啊???x,y是私有成员啊  怎么能通过对象名调用啊p.x  p.y      
      

  2.   

    第一,一般来说拷贝构造函数最好用ClassName(const ClassName & ref),以保证不会影响参数。
    第二,就算是私有成员变量也没有问题,都是point类嘛。不信你试试,只要是类内的函数都可以这样访问的。
      

  3.   

    参数类型和自己一样,private、protected就不管用了,因为自己已经知道了自己的成员列表,再限制就没有意思了。把上面的函数改为 
    void fun(point &p);void fun::point(point &p)
    {x=p.x;
     y=p.y;
    }效果也一样。
      

  4.   

    我这样给你说吧,你的那个函数:
    ponit::point(point &p)
    {x=p.x;
     y=p.y;
    }其实是这样,你知道吧:
    ponit::point(point &p)
    {this->x=p.x;
     this->y=p.y;
    }你看this指针和p的类型是一样的,只不过一个是指针,一个是实例,但他们对成员函数和成员变量的访问权限是完全一样,这样你应该理解了吧?