拷贝构造函数

来源:百度知道 编辑:UC知道 时间:2024/06/27 17:57:53
#include <iostream.h>
#include <string.h>

class Student
{
public:
Student(char * pName="no name")
{
cout<<"constructing new student "<<pName<<endl;
strncpy(name,pName,sizeof(name));
name[sizeof(name)-1]='\0';
}

Student(Student & s)
{
cout<<"constructing copy of "<<s.name<<endl;
strcpy(name,"copy of ");
strcat(name,s.name);
}

~Student ()
{
cout<<"destructing "<<name<<endl;
}

protected :
char name[40];
};

class Tutor
{
public:
Tutor(Student & s):student(s)
{
cout<<"constructing tutor\n";
}

protected:
Student student;
};

void fn(Tutor tutor)
{
cout<<"in fun

这个程序运行的结果已经比较清楚了呀。当Tutor对象构造时,其保护成员student先初始化为参数randy,因此调用了拷贝构造函数;假使将:student(s)屏蔽掉,那么Tutor对象的保护成员student没有显式的初始化代码,所以只好调用无参数的Student类构造函数了。