有如下的程序:#include <cstring.h>#include <iostream.h>using namespace std;class MyString{p

题目
有如下的程序:include include using namespace std;class MyString{p

有如下的程序: #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没有定义此复制构造函数,所以会出错。
如果没有搜索结果或未解决您的问题,请直接 联系老师 获取答案。
相似问题和答案

第1题:

下面程序错误的语句是①include ②void main()③{④int * p=new int[1]⑤p=9⑥cout<<* p<

下面程序错误的语句是

①#include<iostream.h>

②void main()

③{

④ int * p=new int[1]

⑤ p=9

⑥ cout<<* p<<end1;

⑦ delete []p;

⑧}

A.④

B.⑤

C.⑥

D.⑦


正确答案:B
解析:本题考查的是指针的使用,p是指向int型的指针,若想给它指向的元素赋值,应使用*符号,直接赋值相当于改变了原来p存储的地址。

第2题:

有如下的程序:include include using namespace std;class MyString{

有如下的程序:#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); return0;}在运行上面的程序时出错,出错的原因是( )。

A.构造函数的实参不允许是本类的对象

B.没有定义实现深层复制(深拷贝)的复制构造函数

C.构造对象a时实参与形参类型不符

D.系统不能生成默认的复制构造函数


正确答案:B

第3题:

有下列的程序:includeincludeusing namespace std;class MyString{pub

有下列的程序: #include<cstring.h> #include<iostream.h> using namespace std; class MyString { public: MyString(const char*s); ~MyString()<delete[]data;} protected: unsigned len; char*data; };

A.构造函数的实参不允许是本类的对象

B.没有定义实现深层复制(深拷贝)的复制构造函数

C.构造对象a时实参与形参类型不符

D.系统不能生成默认的复制构造函数


正确答案:B
解析: 此题考查的是类的构造函数。C++语言中当一个新对象被另一个已存在的同类型对象初始化时要调用复制构造函数。语句“My String b(a);”符合条件,将调用My String的复制构造函数,但类My String未定义复制构造函数,所以会出错。

第4题:

下列程序的输出结果是______。includeinclude using namespace std;void

下列程序的输出结果是______。

include <iostream.h>

include <cstring.h>

using namespace std;

void fun(const char*s,char &C) {c=s[strlen (s)/2];}

int main {)

{

char str [] ="ABCDE";

char ch=str[1];

fun(str,sh);

cout<<Ch;

return 0;

}


正确答案:C
C 解析:本题考核数组的定义、使用以及函数的调用。fun函数的作用是将字符串str中间的字符赋值给地址传入的变量ch。所以ch的值将被修改为‘C’。

第5题:

有以下程序:includeincludevoid main( ){char * p="abcde\0fghjik\0";c

有以下程序: #include<string.h> #include<iostream.h> void main( ) { char * p="abcde\0fghjik\0"; cout < < strlen(p) ;} 程序运行后的输出结果是

A.12

B.15

C.6

D.5


正确答案:D
解析:C++语言规定了一个字符串结束标志,以字符'\0'代表,在遇到'\0'时,表示字符串结束,由它前面的字符组成字符串。

第6题:

有以下程序includeincludevoid main( ){char*p="abcde\0fghjik\0"; cou

有以下程序 #include<string.h> #include<iostream.h> void main( ) { char*p="abcde\0fghjik\0"; cout<<strlen(p);} 程序运行后的输出结果是

A.12

B.15

C.6

D.5


正确答案:D
解析:C++语言规定了一个字符串结束标志,以字符'\0'代表,在遇到'\0'时,表示字符串结束,由它前面的字符组成字符串。

第7题:

有下列的程序: include include using namespace std; cl

有下列的程序: #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++语言中当一个新对象被另一个已存在的同类型对象初始化时要调用复制构造函数。语句“My String b(a);”符合条件将调用My String的复制构造函数,但类My String未定义复制构造函数,所以会出错。

第8题:

有如下的程序: #include<cstring.h) #ingclude<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) {l

A.构造函数的实参不允许是本类的对象

B.没有定义实现深层复制(深拷贝)的复制构造函数

C.构造对象a时实参与形参类型不符

D.系统不能生成默认的复制构造函数


正确答案:B
解析: C++语宫中当一个新对象被另一个已存在的同类型对象初始化时要调用复制构造函数,语句’MyS- trmg b(a),”符合此条件将调用类MyString的复制构造函数,但是类MyString没有定义此复制构造函数,所以会出错。

第9题:

下面程序错误的语句是 ① include ② void main( ) ③ { ④ int * p=new int[1] ; ⑤ p

下面程序错误的语句是

① #include<iostream.h>

② void main( )

③ {

④ int * p=new int[1] ;

⑤ p=9;

⑥ cout < < * p < <endl;

⑦ delete[ ] p;

⑧ }

A.④

B.⑤

C.⑥

D.⑦


正确答案:B
解析:本题考查的是指针的使用,p是指向int型的指针,若想给它指向的元素赋值,应使用。符号,直接赋值相当于改变了原来p存储的地址。