如何理解拷贝构造函数?
类名::类名(类名 &对象名);
point::point(point &p)
那么上面这个p也是一个对象了?
----------------------
#include <iostream>
class point
{
public:
point(int xx=0, int yy=0){x=xx;y=yy;}
point(point &p);
int Getx(){return x;}
int Gety(){return y;}
private:
int x,y;
};
//成员函数实现
point::point(point &p)
{
x=p.x; //这两个赋值怎么理解?
y=p.y;
cout < < "copy ";
}
void main()
{
point a(4,5);
point b(a);
}
相关文档:郑莉,董渊C++第三版,106页4-2例,有删改。
------------------------------------
x=p.x;
y=p.y;
这两个在
a(4,5)
b(a);p.x等价于a对象的私有数据成员?
那么x=p.x这左边的x又是b的私有数据成员了?
[解决办法]
mark
[解决办法]
那么上面这个p也是一个对象了?
----------------------
p 是一个对象呀。
p.x等价于a对象的私有数据成员?
那么x=p.x这左边的x又是b的私有数据成员了?
----------------------------------------
成员函数可以访问私有成员,其实那两句可以 :this.x=p.x; this.y=p.y ;
其实 a 和 b 指向同一资源。
我的理解,我们一起讨论,呵呵
[解决办法]
那么x=p.x这左边的x又是b的私有数据成员了?
是这样,左边的x相当于this-> x或*this.x
构造函数也是成员函数,所以可以访问私有数据成员
[解决办法]
那么上面这个p也是一个对象了?
----------------------
p是一个对象 可以这样理解
x=p.x; //这两个赋值怎么理解?
y=p.y;
--------------------------------------------
楼上的解释你可以看下 是可以理解的
[解决办法]
我建议你换C++ Primer来学C++,就不会有那么多疑问了。
[解决办法]
楼主应该仔细看一下书.
类名::类名(类名 &对象名);
point::point(point &p)
那么上面这个p也是一个对象了? //p是point 类型的对象的引用
----------------------
#include <iostream> //加上using namespace std;
class point
{
public:
point(int xx=0, int yy=0){x=xx;y=yy;}
point(point &p);
int Getx(){return x;}
int Gety(){return y;}
private:
int x,y;
};
//成员函数实现
point::point(point &p)
{
x=p.x; //这两个赋值怎么理解?
y=p.y; //x=p.x就是把当前对象的x用这个拷贝对象的引用p来赋值,y同理
cout < < "copy "; //也就是相当于this-> x=p.x这样, 那么point b(a)可以解开:
} //{x=a.x;y=a.y;cout < < "copy ";} 也就是这个新建的对象b里面的x,y的值
void main() //分别等于那个已经存在的对象a里面的x,y值
{
point a(4,5);
point b(a);
}
相关文档:郑莉,董渊C++第三版,106页4-2例,有删改。
------------------------------------
x=p.x;
y=p.y;
这两个在
a(4,5) //这是建立一个新的对象,用4,5来初始化它
b(a);p.x等价于a对象的私有数据成员? //这也是建立一个新的对象b,用a来初始化它
那么x=p.x这左边的x又是b的私有数据成员了? //p.x是a的私有成员,x是b的私有成员,由于这
//个拷贝构造函数是类的成员函数,所以是可以操作
//这些私有成员进行赋值的
------解决方案--------------------
这也算是常问问题了。
简单的说C++的访问限定符是针对类的,而不是针对对象的。
就是说在类A的成员函数里面你可以访问,任意一个A的对象的私有变量和私有函数。
[解决办法]
私有的当然也得给自己访问啊,不然没有可以访问的了,
是否该这样说呢:类的封装性,而不是对象的封装性,同类的对象就。。。
[解决办法]
msccao() ( ) 信誉:100 Blog 加为好友 2007-4-5 0:36:00 得分: 0
那么上面这个p也是一个对象了?
----------------------
p 是一个对象呀。
p.x等价于a对象的私有数据成员?
那么x=p.x这左边的x又是b的私有数据成员了?
----------------------------------------
成员函数可以访问私有成员,其实那两句可以 :this.x=p.x; this.y=p.y ;
其实 a 和 b 指向同一资源。
我的理解,我们一起讨论,呵呵
a和b完全是两个独立的内存,只不过经过拷贝构造函数之后,a\b两块内存里面的数据相同而已,
谈什么指向同一资源.
当然如果x\y成员变量是指针类型,那么确实经过LZ的拷贝构造函数,会导致a.x b.x(a.y, b.y)指向同一内存,因此在这种情况下一般都会改写拷贝构造函数,重新为b的x\y分配内存。
也就是一般所说的深拷贝浅拷贝了。