CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

拷贝构造函数

楼主nnlucky()2006-03-18 14:23:31 在 C/C++ / C++ 语言 提问

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

相关问题

  • C++拷贝构造函数
  • 拷贝构造函数??
  • 关于构造函数和拷贝构造函数的对比。
  • 构造函数和拷贝构造函数
  • 派生类的拷贝构造函数
  • 关于C++的拷贝构造函数
  • 类构造拷贝函数问题.
  • 关于拷贝构造函数?
  • 关于delphi的拷贝构造函数
  • 有关于拷贝构造函数

关键词

  • 函数
  • 拷贝
  • 私有
  • 拷贝构造函数
  • 访问
  • 成员
  • 公有
  • 类
  • 对象
  • 定义

得分解答快速导航

  • 帖主:nnlucky
  • id_edge
  • cenlmmx
  • liyukai
  • zxx110
  • ydfivy
  • pgmsoul
  • pgmsoul

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo