| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 669 人关注过本帖
标题:拷贝构造函数的问题
只看楼主 加入收藏
saltfish_007
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2006-10-21
收藏
 问题点数:0 回复次数:6 
拷贝构造函数的问题
class Student

{public:

Student(char*pName="no name",int ssid=0}
{.............}


Student(Student & s)

{.............}

~Student()

{..........}

protected:
char name[40];

int id;

};


以上是一个构造函数

但是我不明白其中红色的语句是什么意思,请各位指教。

我正学到拷贝构造函数,不明白拷贝构造函数到底有什么含义,谢谢各位。
搜索更多相关主题的帖子: 函数 构造 拷贝 
2007-01-10 10:29
radcat
Rank: 3Rank: 3
等 级:论坛游民
威 望:8
帖 子:306
专家分:45
注 册:2006-9-12
收藏
得分:0 
是一个带参数的构造函数,其中的&s是取一个对象的地址,就是用一个对象初始化一个新的对象,属于浅拷贝,如果原对象拥有堆内存,则要考虑使用深拷贝.

2007-01-10 15:47
saltfish_007
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2006-10-21
收藏
得分:0 
谢谢

是不是Student(Student & s)这条语句就相当于把Student类的构造函数重新定义了?但是定义过程中如果要用到Student的构造函数中的参数还是可以继续用的?也就是你说的初始化。

请问是这个意思吗?那么s又表示什么?

因为我的其中一个自定义函数是:

void fn(Student s)

{…………}

所以我不明白为什么不直接声明一个对象s就好了

还要做一个拷贝构造函数。



我问的问题如果您觉得弱智请原谅,我初学,谢谢斑竹的回复。
2007-01-10 19:39
cz522321
Rank: 1
等 级:禁止访问
威 望:2
帖 子:569
专家分:5
注 册:2006-3-13
收藏
得分:0 
这是有关引用的问题,引用跟C里面的地址相似,它具有地址操作的优点也具有一般变量的特点。用引用的目的就是使得你的操作能够具有地址操作的优点和具有一般操作的特点。例如用引用可以在这个函数里面改变传递来的参数的值,但用对象的话就达不到这个效果。

2007-01-10 21:32
radcat
Rank: 3Rank: 3
等 级:论坛游民
威 望:8
帖 子:306
专家分:45
注 册:2006-9-12
收藏
得分:0 
Student(Student & s)确实是重新定义了构造函数,并且根据c++标准,如果用户自定义了构造函数,编译器将不再提供默认的构造函数Student(),这涉及到一个子类继承的问题.
例如你没有在父类中定义Student(Student & s),那么子类的构造函数为
class mestudent : public Student
{
mestudent ();
}
反过来假如你在父类中定义了Student(Student & s),那么子类的构造函数为
class mestudent : public Student
{
mestudent ():Student(一个对象的地址);
}
好象把问题有点扯远了
至于你说的为什么需要拷贝构造函数,举个例子:
Class Student
{
public:
int x;int y;............
}
如果没有拷贝构造函数
Student a;
a.x=100;a.y=300;............
Student b;
我想让b和a拥有一样的值那么
b.x=a.x;b.y=a.y;............
如果有拷贝构造函数
Student b(a);
明白了吗?
不过说实在的拷贝构造函数在实际编程中并不是经常用到的,很少有人这么用

2007-01-11 08:38
saltfish_007
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2006-10-21
收藏
得分:0 
我想让b和a拥有一样的值那么
b.x=a.x;b.y=a.y;............
如果有拷贝构造函数
Student b(a);




斑竹,红色字是你的回复的最后几行。你说拷贝构造函数是Student b(a);请问格式是怎么样的?

因为我书上的拷贝构造函数是 Student(Student &s),我连这个格式是怎么样的还是不明白

不过我明白了拷贝构造函数的用法了,非常感谢各位的指教,特别是斑竹的一贯热心,谢谢
2007-01-11 21:39
fengzar1984
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2006-3-30
收藏
得分:0 


student(student &s)是直接的初始化.

把它当变量看.

int a(5);

int a = 5;功能一样,具体什么区别我也不晓得

2007-01-20 16:53
快速回复:拷贝构造函数的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016111 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved