请帮我看看这个拷贝构造函数!

ztwz 2004-09-24 03:10:49
//问题我都用注释写在相应的位置了!小弟先谢啦!
#include <iostream>
#include <string.h>

using namespace std;

class student
{
public:
student(char * pname="no name", int ssid=0)
{
id=ssid;
strcpy(name,pname);
cout<<"constrcting new student"<<pname<<endl;
}

student(student&s) //这个student &s是不是复制student s这个构造的地址!这个函数其本看不懂在做什么,请大虾解释一下啦!
{
cout <<"constructing copy of"<<s.name<<endl;
strcpy(name,"copy of");
strcat(name,s.name);
id=s.id;
}
~student()
{
cout<<"destructing"<<name<<endl;
}
protected:
char name[40];
int id;
};


void fn(student s) //这儿是用student s这个构造函数的值做参数吗?构造函数不是没反回值的吗?在这要执行完student s这个构造函数才进入fn()这个函数主体吧!
{
cout<<"in function fn()"<<endl;
}

int main(int argc, char *argv[])
{
student randy("randy",1234);
cout<<"calling fn()"<<endl;
fn(randy);
cout<<"returned from fn()\n";
system("PAUSE");
return 0;
}
...全文
71 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
daylove 2004-09-24
  • 打赏
  • 举报
回复
同意楼上的
shw014 2004-09-24
  • 打赏
  • 举报
回复
student(student&s) //这个student &s是不是复制student s这个构造的地址!这个函数其本看不懂在做什么,请大虾解释一下啦!

生成一个新的student类的实例,函数中的语句表明这个函数被执行了,该实例由该函数生成

void fn(student s) //这儿是用student s这个构造函数的值做参数吗?构造函数不是没反回值的吗?在这要执行完student s这个构造函数才进入fn()这个函数主体吧!

用student 类做参数(就像int、float等类型一样)。

fn(randy);//C++语言是传值调用,调用时将变量(也可以是表达式)的值复制到堆栈中作为参数 执行该函数
diandian82 2004-09-24
  • 打赏
  • 举报
回复
拷贝构造函数有三种情况时被调用:
1。当用类的一个对象去初始化类的另一个对象时!
2。如果函数的形参是类的对象,调用函数时,进行形参和实参结合时!
3。如果函数的返回值是类的对象,函数执行完成返回调用者时!

student(student &s)
&代表引用类型!

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧