问题
单项选择题
有如下的程序: #include <cstring.h> #include <iostream.h> using namespace std; class MyString { public: MyString(const char*s); ~MyString () {delete [] data;} protected: unsigned len; char*data; }; MyString::MyString(const char *s) { len=strlen (s); data=new char[len+1]; strcpy (data,s); } int main () { MyString a("C++ Programing"); MyString b(a); return 0; } 在运行上面的程序时出错,出错的原因是
A.构造函数的实参不允许是本类的对象
B.没有定义实现深层复制(深拷贝)的复制构造函数
C.构造对象a时实参与形参类型不符
D.系统不能生成默认的复制构造函数
答案
参考答案:B
解析: 本题考核类的构造函数。c++语言中当一个新对象被另一个已存在的同类型对象初始化时要调用复制构造函数,语句"MyString b(a);"符合此条件将调用类MyString的复制构造函数,但是类MyString没有定义此复制构造函数,所以会出错。