CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

拷贝构造函数能否重载?

楼主FeelingWELL(FeelingWELL)2006-03-13 12:11:02 在 C/C++ / C++ 语言 提问

如题 问题点数:20、回复次数:37Top

1 楼popy007(Twinsen)回复于 2006-03-13 12:16:03 得分 2

可以  
   
  class   A   {  
  public:  
  A()   {}  
  A(const   A&   a)   {}  
  A(const   A&   a,   int)   {}  
  };  
   
  Top

2 楼bluewindyy(班班)回复于 2006-03-13 12:21:38 得分 0

可以的Top

3 楼OnTheWayWWJ(在路上)回复于 2006-03-13 12:22:19 得分 0

可以Top

4 楼start1298(hugo)回复于 2006-03-14 11:26:50 得分 0

只要它们的参数,个数,顺序不同就可以!!!  
  Top

5 楼FeelingWELL(FeelingWELL)回复于 2006-03-14 13:19:53 得分 0

谢谢各位Top

6 楼danjiewu(阿丹)回复于 2006-03-14 14:26:17 得分 0

A(const   A&   a,   int)   {}  
  解释下这是什么意思?Top

7 楼pyrophile(豆子(天上云彩往下飘))回复于 2006-03-14 14:36:39 得分 0

A(const   A&   a,   int)   {}  
  等于A(const   A&   a,   int   b)   {}Top

8 楼ningsheng(闲云野鹤)回复于 2006-03-14 15:03:53 得分 0

多一个参数好象就不算拷贝构造函数了Top

9 楼kunp(一天一小步)回复于 2006-03-14 16:02:19 得分 0

如果人家一定要这么用:  
  A   a1;  
  A   a2(a1,   2);  
  也是可以的Top

10 楼BluntBlade(信仰迷离·重构之道,在于Redo/Undo之间)回复于 2006-03-14 16:05:03 得分 0

“拷贝构造”的语义是什么?  
  “构造”的语义又是什么?Top

11 楼danjiewu(阿丹)回复于 2006-03-14 16:12:16 得分 2

如果人家一定要这么用:  
  A   a1;  
  A   a2(a1,   2);  
  也是可以的  
   
   
  A   a2(a1,   2);  
  这个应该就是构造函数,而不应该叫拷贝构造函数了吧?Top

12 楼popy007(Twinsen)回复于 2006-03-14 16:26:33 得分 2

多一个参数好象就不算拷贝构造函数了  
  ==  
   
  标准的构造函数应该是  
   
  X(const   X&)  
   
  的格式,但是lz问的是“是否可以重载?”,也就是说放方法的  
   
  signature需要改变,否则怎么能叫重载?Top

13 楼yuanchuang(元创)回复于 2006-03-14 16:53:57 得分 2

重载拷贝构造函数?  
   
  不是X(const   X&)格式的也能算拷贝钩造函数?  
   
  当然不能!Top

14 楼Sword_liao(Sword_liao)回复于 2006-03-14 17:14:54 得分 2

不能,拷贝构造函数格式固定.格式不一样就不是拷贝构造了Top

15 楼ugg(逸学堂(exuetang.net))回复于 2006-03-14 18:05:47 得分 2

什么是构造函数?  
  什么是拷贝构造函数?  
  构造函数能重载否?  
  拷贝构造函数只是带参数(参数是自身的实例)的构造函数!Top

16 楼syy6()回复于 2006-03-14 18:47:15 得分 0

那就不是拷贝构造函数了阿。Top

17 楼liuyuanxiang()回复于 2006-03-14 20:48:12 得分 0

拷贝构造函数是有且自由一个参数是自己类对象引用的函数,所以不能重载Top

18 楼toumao(偷猫)回复于 2006-03-14 20:52:55 得分 0

重载要求参数区别,  
  要么参数个数不同、要么类型不同、要么顺序不同,  
  拷贝核造函数名没法重载,  
  因为它的参数只有一个、而且类型确定。Top

19 楼FeelingWELL(FeelingWELL)回复于 2006-03-14 21:54:48 得分 0

拷贝构造函数的的基本形式是    
                        <类名>::<拷贝初始化构造函数名>(const<类名>&<引用名>)  
        如果   const<类名>     引用的是不同的类名的话,这样算不算重载??Top

20 楼Jinhao(辣子鸡丁·GAME就这样OVER了)回复于 2006-03-14 23:35:55 得分 3

拷贝构造函数当然可以重载  
   
  Class_Type::Class_Type(   Reference_of_Class_Type)  
  Class_Type::Class_Type(   Reference_of_Class_Type,   T   =   object_of_T)  
  往往我们都是用的const   T&。  
   
  T(T&);  
  T(const   T&);    
  T(volatile   T&);  
  T(const   volatile   T&);  
   
  除了上面的,还有就是,有更多参数的,不过其他参数都必须有默认值,例如  
  T(T&,   int   =   0);  
   
  把上面几种情况放在一起就重载了拷贝构造函数  
   
  另外  
  template<typename   U>   T(U&   );   绝对不会被当作copy   constructor调用Top

21 楼yuanchuang(元创)回复于 2006-03-15 07:55:46 得分 0

T(T&);  
  T(const   T&);    
  T(volatile   T&);  
  T(const   volatile   T&);  
  会存在二义性的吧!Top

22 楼Jinhao(辣子鸡丁·GAME就这样OVER了)回复于 2006-03-15 11:12:33 得分 0

怎么会呢?绝对不会...Top

23 楼Jinhao(辣子鸡丁·GAME就这样OVER了)回复于 2006-03-15 11:19:39 得分 1

哦,错了,是会有二义性。问题的关键是重载Top

24 楼xiang1358(向圣海)回复于 2006-03-15 12:18:07 得分 0

指针和引用参数的const   和   volatile   可以重载的,不会有二义性的吧!!~~~~~Top

25 楼zerg_memory(小虫子)回复于 2006-03-15 17:09:37 得分 2

成员函数被重载的特征:  
  (1)相同的范围(在同一个类中);  
  (2)函数名字相同;  
  (3)参数不同;  
  (4)virtual关键字可有可无。  
   
  拷贝构造函数是符合的Top

26 楼SEUU(三枝花)回复于 2006-03-15 21:50:28 得分 0

不能重载  
   
  还有,你的分多给我一点吧,我是来得分的,我只要星星!Top

27 楼txj_killer(流浪的天行)回复于 2006-03-16 16:11:39 得分 2

#include   <iostream>  
   
  using   namespace   std;  
   
  class   A  
  {  
  public:  
          A(){};  
          A(volatile   A&)  
          {  
                  cout   <<   "volatile"   <<   endl;  
          }  
          A(const   A&)  
          {  
                  cout   <<   "const"   <<   endl;  
          }  
          A(A&)  
          {  
                  cout   <<   "common"   <<   endl;  
          }  
  };  
   
  int   main()  
  {  
          A   a;  
          A   b(a);  
   
          const   A   c;  
          A   d(c);  
   
          volatile   A   e;  
          A   f(e);  
          system("pause");  
          return   0;  
  }  
   
  这样是可以重载的,不会有二义性。  
   
  但是如果通过默认参数重载,则如果去除那个默认参数后的写法也存在的话,会出现二义性。Top

28 楼FeelingWELL(FeelingWELL)回复于 2006-03-17 11:20:13 得分 0

class   A{  
  publc:  
    A(){}  
  A(const&a);                       //1  
  A(const&a,int);               //2  
  ...}  
  这个应该算重载吧?只要2中的第二个参数没有给默认值,应该不会出现二义性啊  
  而且也符合了重载条件了Top

29 楼txj_killer(流浪的天行)回复于 2006-03-17 11:52:46 得分 0

FeelingWELL(FeelingWELL)   (   )   信誉:100     2006-03-17   11:20:00     得分:   0      
     
     
        class   A{  
  publc:  
    A(){}  
  A(const&a);                       //1  
  A(const&a,int);               //2  
  ...}  
  这个应该算重载吧?只要2中的第二个参数没有给默认值,应该不会出现二义性啊  
  而且也符合了重载条件了  
       
  ______________________________________  
   
  没给默认值算重载,可惜不再是拷贝构造函数了,是否是拷贝构造函数有一个基本的要求,那就是在传值返回的时候会可能被调用到,而A(const&a,int);   这种重载显然是不可能的。Top

30 楼popy007(Twinsen)回复于 2006-03-17 12:19:02 得分 0

txj_killer(流浪的天行)    
  没给默认值算重载,可惜不再是拷贝构造函数了,是否是拷贝构造函数有一个基本的要求,那就是在传值返回的时候会可能被调用到,而A(const&a,int);   这种重载显然是不可能的。  
   
  ==  
   
  class   A   {  
  public:  
      A(const   A&   a,   int   =   0)   {}  
  };  
   
  这个可以Top

31 楼popy007(Twinsen)回复于 2006-03-17 12:36:12 得分 0

#include   <iostream>  
  using   namespace   std;  
   
  class   A   {  
  public:  
  A()   {}  
  A(const   A&   a,   int   =   0)   {   cout   <<   "cpy-ctor\n";   }  
  };  
   
   
  void   main()   {  
  A   a;  
  A   a2(a);  
  }Top

32 楼BenjaminHuang(肥牛阿Ben)回复于 2006-03-17 12:51:15 得分 0

如果函数的参数本类对象引用的话还能叫做拷贝构造函数吗?Top

33 楼txj_killer(流浪的天行)回复于 2006-03-17 12:57:59 得分 0

to   popy007(Twinsen):  
   
  那种情况我前面已经说过了,那样确实可以,但当同时存在A(const   A&   a)的时候会出现二义性。Top

34 楼fiftymetre(50米深蓝)回复于 2006-03-17 13:12:54 得分 0

prototype   模式Top

35 楼Jinhao(辣子鸡丁·GAME就这样OVER了)回复于 2006-03-17 16:42:46 得分 0

师傅不愧为师傅呀。一来就是这么高级的应用。佩服~~Top

36 楼txj_killer(流浪的天行)回复于 2006-03-17 17:13:53 得分 0

靠,50m这不是在骗分么,bs之~~Top

37 楼wang1523(大菜鸟)回复于 2006-03-17 21:04:21 得分 0

当然了,象拥有堆变量的类对象来说,还必须有自己重载的拷贝构造函数呢Top

相关问题

  • 有关运算符重载和拷贝构造函数的问题
  • C++拷贝构造函数
  • 拷贝构造函数??
  • 拷贝构造函数
  • 构造函数和[]重载的问题
  • 如何重载FORM的构造函数?
  • 如何防止重载构造函数?
  • 构造函数重载的问题
  • 怎么重载类的构造函数?
  • 如何重载构造函数?

关键词

  • 函数
  • 拷贝
  • 重载
  • 拷贝构造
  • 参数
  • 构造
  • 二义性
  • volatile
  • 格式
  • 引用

得分解答快速导航

  • 帖主:FeelingWELL
  • popy007
  • danjiewu
  • popy007
  • yuanchuang
  • Sword_liao
  • ugg
  • Jinhao
  • Jinhao
  • zerg_memory
  • txj_killer

相关链接

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

广告也精彩

反馈

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