拷贝构造函数
class p
{
public:
p(int xx=0,int yy=0)
{
x=xx;
y=yy;
}
p(p &a)//在定义拷贝构造函数时,对象a应该不能访问类p的私有成员x和y吧,此处怎么解释?
{
x=a.x;
y=a.y;
}
private:
int x,y;
};
问题点数:20、回复次数:21Top
1 楼nnlucky()回复于 2006-03-18 14:29:00 得分 0
高手们帮忙解释解释Top
2 楼king_fp(松)回复于 2006-03-18 14:32:02 得分 0
能啊,Top
3 楼nnlucky()回复于 2006-03-18 14:35:29 得分 0
是啊可以访问 但是对象不是不能访问类的私有成员吗?那为什么定义拷贝构造函数时怎么有可以了,奇怪Top
4 楼id_edge()回复于 2006-03-18 14:38:30 得分 2
私有公有是针对类来说的,同一个类的都可以访问私有成员Top
5 楼cenlmmx(学海无涯苦作舟)回复于 2006-03-18 14:40:26 得分 2
拷贝构造函数本来就是成员函数,类的一切成员都可以访问.
私有只是针对非成员函数而言.Top
6 楼liyukai(进行中)回复于 2006-03-18 14:49:02 得分 2
public,protected,private
这些只是访问控制而已,是针对外部而言,楼上2位说的很详细了
Top
7 楼nnlucky()回复于 2006-03-18 14:50:05 得分 0
在同一个类中,各成员间无论公有私有可以互相访问,但当定义了一个类对象,通过对象去访问成员就应该有公私之分吧Top
8 楼zxx110(新)回复于 2006-03-18 15:21:11 得分 6
当说公有,私有访问属性的时候都是说类,我想应该没有哪个说一个对象的私有访问属性;
不知道下面的程序能对你理解有用不?
#include "iostream.h"
class test
{
public:
test(int xx=0,int yy=0)
{
x=xx;
y=yy;
}
test(test &a)
{
x=a.x;
y=a.y;
}
void add(test &a)
{
x=x+a.x;
y=y+a.y;
}
void show()
{
cout<<"x="<<x<<",y="<<y<<endl;
}
private:
int x,y;
};
void main()
{
test object1(1,1);
test object2(object1);
object2.show();
object2.add(object1);//即使不是拷贝构造函数,只要是成员函数就可以访问私有成员
object2.show();
}
Top
9 楼ydfivy(我就是一送外卖的)回复于 2006-03-18 15:37:41 得分 3
在一个类的成员函数里面,可以访问该类另一个对象的私有成员
Top
10 楼nnlucky()回复于 2006-03-18 16:27:26 得分 0
嗯,谢谢各位了!我一直误解类的对象在任何情况下都不能访问私有成员呢Top
11 楼guoshun9231(Aaron)回复于 2006-03-18 19:03:46 得分 0
刚学习都会有这样的认为的。努力!Top
12 楼aniude(重返荣耀)回复于 2006-03-19 00:23:47 得分 0
怎么我在学习中没有这样想过呢?? 呵呵Top
13 楼ruodeer(看我的个性签名都给我分)回复于 2006-03-19 10:19:06 得分 0
学习java的时候才顿悟这个事实Top
14 楼jackmtlee(sunshine)回复于 2006-03-19 10:27:47 得分 0
默认构造函数,拷贝构造函数,析构函数是每个对象中都要有的三个公共接口,接口中当然可以访问私有成员.Top
15 楼pgmsoul(游侠)回复于 2006-03-19 10:33:16 得分 3
可以,一开始也有这样的想法,但这确实比较方便.但在某种意义也破坏了类的封装概念.这可以理解成,类自身自动成为自身的友元.Top
16 楼pgmsoul(游侠)回复于 2006-03-19 10:41:23 得分 2
说真的,让同一类型的不同实例可以访问相互的私有成员确实比较特殊.它的设计思想大概是这样:
作为这个类设计者,完全没有必要封装任何东西,它应该有完全的控制权.封装是为了不同的程序员之间的.
Top
17 楼bugzhao(阿辉)回复于 2006-03-19 14:50:29 得分 0
问一下,一个类的两个对象A,B,
A的私有成员可以在B中访问么? 虽然A、B属于一个类,但却是两个对象啊Top
18 楼willingbupt(buptcsdn)回复于 2006-03-19 18:51:35 得分 0
re:问一下,一个类的两个对象A,B,
A的私有成员可以在B中访问么? 虽然A、B属于一个类,但却是两个对象啊
?举一个类的两个对象A,B具有你说的那种例子看看,即使有叶不可以访问的Top
19 楼nnlucky()回复于 2006-03-19 18:52:32 得分 0
可以啊,如重载复数加时,将其重载成类的成员函数时,函数的参元就是复数类的一个对象,在函数体中就是通过两个对象访问各自私有数据成员实现的。Top
20 楼nnlucky()回复于 2006-03-19 18:54:31 得分 0
include "iostream.h"
class test
{
public:
test(int xx=0,int yy=0)
{
x=xx;
y=yy;
}
test(test &a)
{
x=a.x;
y=a.y;
}
void add(test &a)
{
x=x+a.x;
y=y+a.y;
}
void show()
{
cout<<"x="<<x<<",y="<<y<<endl;
}
private:
int x,y;
};
void main()
{
test object1(1,1);
test object2(object1);
object2.show();
object2.add(object1);//即使不是拷贝构造函数,只要是成员函数就可以访问私有成员
object2.show();
}
Top
21 楼tudou614(魔蟹座的SATAN)回复于 2006-03-19 19:43:59 得分 0
感觉“拷贝构造函数”明显是个错误的词,应该叫“非拷贝构造”Top




