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

拷贝构造函数和赋值构造函数的区别,不解之处。

楼主verlongan(verlongan)2005-04-05 10:02:55 在 C/C++ / C++ 语言 提问

class   String  
  {  
  private:  
  char   *data;  
  public:  
  String()  
  {    
  data   =   new   char   [10];  
  };  
  String(const   String   &);  
  String   &operator   =   (const   String   &);  
  };  
   
  String::String(const   String   &rs)  
  {  
  if(this   !=   &rs)  
  {  
  data   =   new   char[10];  
  strcpy(this->data,   rs.data);  
  }  
                    //return   *this;这行书上没有写,有必要用吗?  
  }  
   
  String   &String::operator=(const   String   &   rs)  
  {  
  if(this   !=   &rs)  
  {  
  delete[]data;  
  data   =   new   char[10];  
  strcpy(this->data,   rs.data);  
  }  
  return   *this;  
  }  
   
   
   
  int   main(int   argc,   char*   argv[])  
  {  
  String   s1;  
  String   s2(s1);     //调用拷贝构造  
  String   s3   =   s1;   //还是调用拷贝构造,为什么不调用赋值=  
  return   0;  
  }  
  通常拷贝和赋值构造函数都是一齐出现的,但感觉都是一样的代码,C++有必要这样做吗? 问题点数:20、回复次数:9Top

1 楼steedhorse(晨星)回复于 2005-04-05 10:16:26 得分 5

你只需要记住,在C++语言里,  
  String   s2(s1);  
  String   s3   =   s1;  
  只是语法形式的不同,意义是一样的,都是定义加初始化,都调用拷贝构造函数。Top

2 楼zhousqy(标准C匪徒)(甩拉,甩拉)回复于 2005-04-05 10:16:32 得分 5

String   a;  
  String   b(a);   //   invoke   拷贝构造函数  
  String   c   =   b;   //   invode   赋值构造函数Top

3 楼steedhorse(晨星)回复于 2005-04-05 10:19:16 得分 5

C++语言支持两种语法形式的初始化,就是上面的两种。  
  注意,  
  String   s3   =   s1;  
  跟  
  String   s3;  
  s3   =   s1;  
  不同。这里则是首先调用默认构造函数初始化s3,然后使用拷贝赋值从s1那里进行拷贝。而你的例子中s2和s3的构造过程都没有执行国默认构造函数。  
   
  至于为什么不同,不为什么,这就是语法,就好比循环要使用while和for,分支要使用if和switch一样,不能混用。Top

4 楼kobefly(科比--网络学习中)回复于 2005-04-05 10:21:55 得分 0

steedhorse(晨星)   (   )   信誉:119    
   
  正解  
  学习,我也不明白,测试了一下,是楼主说的结果  
   
  原来如此Top

5 楼langzi8818(┤天道酬勤┝爱老婆┦┷我是来学习滴┷)回复于 2005-04-05 10:40:59 得分 0

星星~~好快~Top

6 楼nickshen()回复于 2005-04-05 10:45:50 得分 5

String   c   =   b;   //也是调用拷贝构造函数  
  而  
  String   c;  
  c   =   b;//这才是调用operator   =  
  楼上有误Top

7 楼mymyal123(风之森)回复于 2005-04-05 11:00:01 得分 0

学习Top

8 楼whyglinux(山青水秀)回复于 2005-04-05 11:07:27 得分 0

>>   String   s3   =   s1;   //还是调用拷贝构造,为什么不调用赋值=  
   
  这是因为这里的“=”不是运算符。它只是一种形式上规定的分隔符。Top

9 楼zhousqy(标准C匪徒)(甩拉,甩拉)回复于 2005-04-05 11:19:59 得分 0

String   c   =   b;   //也是调用拷贝构造函数  
  而  
  String   c;  
  c   =   b;//这才是调用operator   =  
  楼上有误  
  =====  
  是嗎,學習。Top

相关问题

  • 拷贝构造函数与赋值函数的具体作用
  • 拷贝构造函数与“=”赋值号的区别是什么?
  • 拷贝构造函数是否会存在自赋值情况
  • 拷贝构造函数和赋值运算符
  • 关于拷贝构造函数和赋值符
  • C++拷贝构造函数
  • 拷贝构造函数??
  • 拷贝构造函数
  • 关于构造函数和拷贝构造函数的对比。
  • 构造函数和拷贝构造函数

关键词

  • c++语言
  • 函数
  • 拷贝
  • 语法
  • 赋值
  • 拷贝构造
  • 调用
  • 构造
  • 初始化
  • rs

得分解答快速导航

  • 帖主:verlongan
  • steedhorse
  • zhousqy
  • steedhorse
  • nickshen

相关链接

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

广告也精彩

反馈

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