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

题目
有如下的程序: include include using namespace st

有如下的程序: #include<cstring> #include<iostream> 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.系统不能生成缺省的拷贝构造函数


相似考题
更多“有如下的程序: #include<cstring> #include<iostream> using namespace st ”相关问题
  • 第1题:

    有如下程序:includeincludeusing namespace std;class BASE{char c;public

    有如下程序: #include<iostream>#include<iosream> using namespace std; class BASE{ char c; public; BASE(char n):c(n){} virtual ~ BASE(){cout<<c;} }; class DERIVED; public BASE{ char c; public: DERIVED (char n): BASE (n+1)

    A.XY

    B.YX

    C.X

    D.Y


    正确答案:A

  • 第2题:

    有下列的程序: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未定义复制构造函数,所以会出错。

  • 第3题:

    阅读以下程序,给出运行结果 #include <iostream> #include <cstring> using namespace std; int main() { string str="I love China!"; cout << str; return 0; }


    emoclew emoclew

  • 第4题:

    有以下程序:include include using namespace std;class base{private: cha

    有以下程序: #include <iostream> #include <string> using namespace std; class base { private: char baseName[10]; public: base ( ) { strcpy (baseName, "Base"); } virtual char *myName() {

    A.DerivedBase

    B.BaseBase

    C.DerivedDerived

    D.BaseDerived


    正确答案:A
    解析:本题考核虚函数的应用。类Derived是从基类Base公有派生而来的。因此,Derived是基类Base的子类型。主函数中定义了一个基类对象bb和一个派生类对象dd。从程序中可看出,派生类Derived的对象dd交给了处理基类Base的对象的函数showPtr进行处理。由于在基类中函数myName被定义成虚函数,所以在函数showPtr中调用的myName函数为派生类的成员函数mySame,从而输出Derived。然后输出className,即基类名称Base。

  • 第5题:

    有如下程序: include include using namespace std; int ma

    有如下程序: #include <iostream> #include <iomanip> using namespace std; int main() { cout.fill('*'); cout << left << setw(4) << 123 << "OK" << endl; return 0; }

    A.123*OK

    B.123*OK**

    C.*123OK

    D.*123**OK


    正确答案:A
    解析:本题考查了输出流的格式控制。cout的fill()方法的作用是设置填充字符,若输出数据宽度小于设置宽度,则空闲位置用填充字符填满。left和endl是C++预定义的用于格式控制的符号常量,前者使输出数据在指定宽度内左对齐,后者使输出换行。setw()函数的作用是设置输入输出宽度,不过宽度设置的效果只对一次输入或输出有效,在完成了一个数据的输入或输出后,宽度设置自动恢复为0(表示按数据实际宽度输入输出)。所以在本题中,输出整数123时宽度为4且左对齐,空出最后一位填入填充字符'*',结果是123*:输出字符串"OK"时宽度自动恢复为0,结果是OK。故程序的输出结果是123*OK,应该选择A。

  • 第6题:

    阅读如下程序,输入“3”运行程序,结果为____。 #include <iostream.h> void main() { int i; cin>>i; cout<<i++<<endl; }


    0,2,4,