拷贝构造函数是什么?
我看C++,不知道其含义,姐妹们请解释一下 问题点数:0、回复次数:13Top
1 楼goodluckyxl(被人遗忘的狗)回复于 2004-12-03 11:55:12 得分 0
站住一下
明天对于构造函数我会为大家做些总结
对于拷贝构造也讨论了
到时 再给你答案吧Top
2 楼tulading(尧石)回复于 2004-12-03 11:57:14 得分 0
是在传递的参数是对象时,用来构造临时对象Top
3 楼horisly(SUN YAT-SEN UNIVERSITY (逸仙先生))回复于 2004-12-03 12:38:36 得分 0
goodluckyxl(被人遗忘的狗) ( ) 信誉:105
站住一下
明天对于构造函数我会为大家做些总结
对于拷贝构造也讨论了
到时 再给你答案吧
-----------------------------
期待...Top
4 楼zjyu88(刚步入三流大学)回复于 2004-12-03 12:48:42 得分 0
我也期待....
---------------------------
我看C++,不知道其含义,姐妹们请解释一下
------------------------------
姐妹们?????你是女的??Top
5 楼willko(珂http://www.willko.cn)回复于 2004-12-03 12:55:46 得分 0
可以看成是初始化对象的其中一种方法。Top
6 楼gimney(星外来客)回复于 2004-12-03 12:57:47 得分 0
简单说和=号用法差不多,可以重载=Top
7 楼ZengMuAnSha(曾牧暗鲨)回复于 2004-12-03 13:02:18 得分 0
简单说和=号用法差不多,可以重载=可以看成是初始化对象的其中一种方法。
Top
8 楼goodluckyxl(被人遗忘的狗)回复于 2004-12-03 13:04:59 得分 0
http://community.csdn.net/Expert/topic/3612/3612455.xml?temp=.2466699
楼主看看吧
我这里是对构造函数可能的问题先进行描述
等过阵讲 一些相对基础的 东西
有问题 短消息Top
9 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2004-12-03 14:24:23 得分 0
防止位拷贝带来的副作用Top
10 楼wwxsoft(婉儿)回复于 2004-12-03 16:18:20 得分 0
拷贝构造函数是一种特殊的构造函数,具有一般构造函数的所有特性,起形参是本类的对象的引用,其作用是使用一个已经存在的对象(由拷贝构造函数的参数指定的对象)去初始化一个新的同类得对像。Top
11 楼wwxsoft(婉儿)回复于 2004-12-03 16:22:14 得分 0
用户可以根据自己实际问题的需要顶一特定的拷贝构造函数,以实现同类对象之间数据成员的传递。如果用户没有声明类的拷贝构造函数,系统就会自动生成一个缺省函数,这个缺省拷贝构造函数的功能是把初始值对象得每个数据成员得值都复制到新建立的对象中。因此,也可以说是完成了同类对象的科龙,这样的道德对象和原对象具有完全相同的数据成员,即完全相同的属性。Top
12 楼qnjian(南一郎 )回复于 2004-12-03 16:36:23 得分 0
一、首先要弄明白什么时候会调用复制构造函数:
1、将某个对象初始化为同一个类中的另一个对象时。
如:Cat a;
Cat b(a);//Cat是一个类
2、将对象当作参数传递给函数时。
3、函数返回对象时。
如 Cat Cat:: getValue();
二、默认情况,编译器是会提供复制构造函数的。但只是将原始对象的成员一个一个原样复制到新创建的对象中去的(这叫所谓的“浅复制”)。如果成员中有指针的话就会出问题。新对象的指针成员与老对象的指针成员会指向同一个地址。这样,改变一个对象的这一成员,会改变到另一个对象的状态。这不是我们的初衷,所以要自定义一个复制构造函数,实现“深复制”,使新对象的指针成员取得一个新地址,只不过该地址存放的值与源对象相同。
三、为了提高效率,降低资源占用,能用引用代替的地方,请尽量用引用,这样就不需要调用复制构造函数啦,因为引用是对象的别名,就是对象本身啦。
下面给出一个例子:
/*本程序考察复制构造函数之用法*/
#include<iostream>
#include<string.h>
use namespace std;
class String
{
private:
char * str;
public:
String(char * s)// 普通数构造函数
{
cout<<"在构造函数中\n";
int size=strlen(s);
str=new char[size+1];
strcpy(str,s);
}
String(String & ss)//复制构造函数
{
cout<<"在复制构造函数中\n";
str=new char[strlen(ss.str)+1];
strcpy(str,ss.str);
}
~String()
{delete str;}
void showstring()
{cout<<str<<endl;}
};
int main()
{
String s1="内存中的字符串";
cout<<"s1=";
s1.showstring();
String s2(s1);
cout<<"s2=";
s2.showstring();
return 0;
}
Top
13 楼qnjian(南一郎 )回复于 2004-12-03 16:38:44 得分 0
不好意思,打快了,上面的use语句应该为:using namespace std;Top




