有如下的程序: #include #include usingnamespacestd; classMyString {public: MyString(constchar*s); MyString(){delete[]data;} protected: unsignedlem char*data;}; MyStrin9::MyString(constchar*s) {len=strlen(s); data=newchar[len+1]; strcpy(data,s);} intmain() {MyStringa("C++Programing"); MyStringb(a); return0;} 在运行上面的程序时出错,出错的原因是( )。
A.构造函数的实参不允许是本类的对象
B.没有定义实现深层复制的复制构造函数
C.构造对象a时实参与形参类型不符
D.系统不能生成默认的复制构造函数
参考答案:B
解析:【解析】C++语言中当一个新对象被另一个已存在的同类型对象初始化时要调用复制构造函数,语句"MyStringb(a);"符合此条件,将调用类MyString的复制构造函数,但是类MyString没有定义此复制构造函数,所以会出错。