首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

怎么理解拷贝构造函数

2012-03-06 
如何理解拷贝构造函数?类名::类名(类名&对象名)point::point(point&p)那么上面这个p也是一个对象了?-----

如何理解拷贝构造函数?
类名::类名(类名   &对象名);
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分配内存。
也就是一般所说的深拷贝浅拷贝了。




热点排行