| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 584 人关注过本帖
标题:构造函数
只看楼主 加入收藏
jjg
Rank: 2
等 级:论坛游民
帖 子:67
专家分:42
注 册:2009-8-19
结帖率:46.15%
收藏
已结贴  问题点数:10 回复次数:6 
构造函数
1.语句myclass a[3],*p[2]调用了几次构造函数?是三次怎么来的?
2.
#include <iostream.h>
#include <string.h>
class student
{
public:
student(char* pname="no name",int ssid=0)
{
id=ssid;
strcpy(name,pname);
cout<<"constructing new student"<<pname<<endl;
}
student(student& s)
{
cout<<"constructing copy of"<<s.name<<endl;
strcpy*(name,"copy of");
strcat(name,"copy of");
id=s.id;
}
~student()
{
cout<<"destructing"<<name<<endl;
}
protected:
char name[40];
int id;
};
void fn(student s)
{
cout<<"in function fn()\n";
}
void main()
{
student randy("Randy",1234);
cout<<"calling fn()\n";
fn(randy);
cout<<"returned from fn()\n";
}
问题:
<1> randy对象的创建不也是Randy传给了pname为什么不是调用拷贝构造函数?到底什么时候调用拷贝构造函数,什么时候调用构造函数?
<2> 为什么用char* pname="no name"这个表示方法,如果我直接用char* pname是不是 有错?char pname呢,用char pname是不是因为传递的是一个复制了的局部对象,起不到真正复制的效果?谁能给我解答一下,谢谢了.

[ 本帖最后由 jjg 于 2009-8-19 16:28 编辑 ]
搜索更多相关主题的帖子: 构造 函数 
2009-08-19 09:47
ly861014
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:66
专家分:177
注 册:2008-10-28
收藏
得分:5 
回复 楼主 jjg

问题<1>:
之所以叫拷贝构造函数,是因为它是用另一个相同类型对象去构造一个新对象,而你这里是用 "Randy",1234 去构造的,如果你有了一个对象,比如student  stu("Randy",1234);那么你就可以student randy(stu);这时候就是用stu去构造randy,就是用的拷贝构造函数。
至于什么时候用拷贝构造函数,什么时候用构造函数,通过上面我说的,你也应该理解了吧。

问题<2>:
char* pname="no name";这是用字符指针去指向一个c风格字符串,其实c风格字符串就是一个以null为结束符的字符数组,这时候就是用pname去指向这个数组的首元素。你是构造了一个默认构造函数,给出了name的默认值,当然最好不要直接用char* pname,否则你在构造一个student对象又有没有给出其name[]的时候,就可能出问题。当然用char pname就不行了,因为这只是一个字符啊,而你的name[]是个字符数组啊,你原意是用一个字符指针去指向一个字符数组元素啊

[ 本帖最后由 ly861014 于 2009-8-19 10:57 编辑 ]
2009-08-19 10:56
ly861014
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:66
专家分:177
注 册:2008-10-28
收藏
得分:0 
回复 楼主 jjg

你的1中描述的是什么啊,看不懂,myclass应该是一个类吧
2009-08-19 10:59
XIAO荣
Rank: 2
等 级:论坛游民
帖 子:87
专家分:20
注 册:2009-2-26
收藏
得分:5 
貌似此程序错误N多。
运行不了。。。
student randy("Randy",1234);应该是调用拷贝构造函数
2009-08-19 11:00
ly861014
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:66
专家分:177
注 册:2008-10-28
收藏
得分:0 
回复 楼主 jjg

对啊,错误很多,定义了fu,怎么用的fn啊,*student s什么意思啊,#include <string> 应该是#include <cstring> 吧

2009-08-19 11:06
jjg
Rank: 2
等 级:论坛游民
帖 子:67
专家分:42
注 册:2009-8-19
收藏
得分:0 
回复 5楼 ly861014
我打错了,我从新编辑一下
2009-08-19 16:13
ly861014
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:66
专家分:177
注 册:2008-10-28
收藏
得分:0 
回复 楼主 jjg

strcpy*(name,"copy of"); //多了个*

还有其他地方最好按标准c++来
比如
#include <iostream.h>
#include <string.h>
写成
#include <iostream>
#include <cstring>
using namespace std;

cout<<"in function fn()\n";
改成
cout << "in function fn()" << endl;

并注意一些编程规范

2009-08-19 16:41
快速回复:构造函数
数据加载中...
 
   



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

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