C++语言程序设计

缺省的复制构造函数
在类的定义中，如果没有显式定义复制构造函数，C++编译器会自动地定义一个缺省的复制构造函数。下面是使用复制构造函数的一个例子：

| 例10-12

#include <iostream.h>
#include <string.h>
class withCC
{
public:
withCC(){}
withCC(const withCC&)
{
cout<<"withCC(withCC&)"<<endl;
}
};

class woCC
{
enum{bsz = 100};
char buf[bsz];
public:
woCC(const char* msg = 0)
{
memset(buf, 0, bsz);
if(msg) strncpy(buf, msg, bsz);
}
void print(const char* msg = 0)const
{
if(msg) cout<<msg<<":";
cout<<buf<<endl;
}
};

class composite
{
withCC WITHCC;
woCC WOCC;
public:
composite() : WOCC("composite()"){}
void print(const char* msg = 0)
{
WOCC.print(msg);
}
};

void main()
{
composite c;
c.print("contents of c");
cout<<"calling composite copy-constructor"<<endl;
composite c2 = c;
c2.print("contents of c2");
}

类withCC有一个复制构造函数，类woCC和类composite都没有显式定义复制构造函数。如果在类中没有显式定义复制构造函数，则编译器将自动地创建一个缺省的构造函数。不过在这种情况下，这个构造函数什么也不作。
类composite既含有withCC类的成员对象又含有woCC类的成员对象，它使用无参的构造函数创建withCC类的对象WITHCC（注意内嵌的对象WOCC的初始化方法）。
在main()函数中，语句：
composite c2 = c;
通过对象C初始化对象c2，缺省的复制构造函数被调用。
最好的方法是创建自己的复制构造函数而不要指望编译器创建，这样就能保证程序在我们自己的控制之下。