问题 单项选择题

有如下的程序:
#include<string.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 ehar[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没有定义此拷贝构造函数,所以会出错。

填空题
多项选择题