有如下的程序: #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) {lA.构造函数的实参不允许是本类的对象B.没有定义实现深层复制(深拷贝)的

题目

有如下的程序: #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.系统不能生成默认的复制构造函数


相似考题
更多“有如下的程序: #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) {lA.构造函数的实参不允许是本类的对象B.没有定义实现深层复制(深拷贝)的”相关问题
  • 第1题:

    有如下程序:includeusing namespace std;class Con{char ID;public:Con():ID('A'){co

    有如下程序: #include<iostream> using namespace std; class Con { char ID; public: Con():ID('A'){cout<<1;} Con(char ID):ID(ID'){cout<<2;} Con(Con&c):ID(c.getID()){cout<<3;} char getID()const{returnID;} }; void show(Con c){to

    A.13A23A

    B.23A13B

    C.13A23B

    D.13B23A


    正确答案:C
    解析: Conc1定义c1对象,调用Con的无参数构造函数,输出1,ID值变为A,执行show(cl)时会调用拷贝构造函数,将c1对象的值拷贝给show()函数的形参,此时输出3,然后在show()中输出c1的ID值A,Con c2('B')定义c2对象,调用Con(char ID)构造函数,输出2,c2的ID值为B,show(c2)执行时先调用拷贝构造函数输出3,然后输出B。因此程序输出结果为“13A23B”。

  • 第2题:

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


    正确答案:B

  • 第3题:

    如下程序的输出结果是______。 include using namespace std; class Pet{ char nam

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

    include<iostream>

    using namespace std;

    class Pet{

    char name[10];

    public:

    Pet(char*nanle){strcpy(this->name,name);}

    const char*getName( )const{return name;}

    virtual void call( )eonst=0;

    };

    class Dog:public Pet{

    public:

    Dog(char*name):Pet(name){ }

    void call( )eonst{cout<<"汪汪叫";}

    };

    class Cat:public Pet{

    public:

    Cat(char*name):Pet(name){ }

    void call( )const{eout<<"喵喵叫";}

    };

    int main( ){

    Pet*petl=new Dog("哈克"),*pet2=new Cat("吉米");

    eout<<petl->getName( );petl->call( );eout<<endl;

    cout<<pet2->getName( );pet2->call( );eout<<endl;

    return 0;

    }


    正确答案:哈克汪汪叫 吉米喵喵叫
    哈克汪汪叫 吉米喵喵叫

  • 第4题:

    Const mystring=“hello”的含义是( )。

    A.在VBScript中,把变量mystring赋值为hello

    B.在VBScript中,把常量mystring的值定为hello

    C.在Java中,把变量mystring赋值为hello

    D.在Java中,把变量mystring赋值为hello


    正确答案:C

  • 第5题:

    有如下程序: #inClude<iostream> using namespaCe std; Class Book{ publiC: Book(Char*t=””){strCpy(title,t);} private: Char titlel40]; }; Class Novel:publiC Book{ publiC: Novel(Char*t=””):Book(t){} Char*Category( )Const{return”文学”;} }; int main( ){ Book * pb; pb=new Novel( ); Cout<<pb→Category( ); delete pb; return 0; } 若程序运行时输出结果是“文学”,则横线处缺失的语句是( )。

    A.Char*Category( );

    B.Char*Category( )Const;

    C.virtual Char*Category( )Const;

    D.virtual Char*Category( )Const=0;


    正确答案:D
    本题考查纯虚函数和抽象类,纯虚函数是在声明虚函数时被“初始化”为0的函数,包含纯虚函数的类为抽象类,抽象类足不能被实例化的,但是可以定义指向抽象类数据的指针变量,当派生类成为具体类后,就可以用这种指针指向派生类的对象,然后通过该指针调用虚函数,实现多态性的操作。所以本题答案为D。

  • 第6题:

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

  • 第7题:

    有如下程序: include using namespace std; class Pet{ char name[10]; public: Pet(c

    有如下程序:

    include<iostream>

    using namespace std;

    class Pet{

    char name[10];

    public:

    Pet(char*name){strcpy(this->name,name);}

    const char*getName()const {return name;}

    virtual void call()const=0;

    };

    class Dog:public Pet{

    public:

    Dog(char*name):Pet(name){}

    void call()const{cout<<"汪汪叫":}

    };

    class Cat:public Pet{

    public:

    Cat(char*name):Pet(name){}

    void call()const{cout<<"喵喵叫";}

    };

    int main(){

    Pet*pet1=new Dog("哈克"),*pet2=new Cat("吉米");

    cout<<pet1->getName();pet1->call();cout<<end1;

    cout<<pet2->getName();pet2->call();cout<<end1;

    return 0;

    }

    程序的输出结果是______。


    正确答案:哈克汪汪叫 吉米喵喵叫
    哈克汪汪叫 吉米喵喵叫 解析:此题考查的是虚函数与多态性。在成员函数的声明前面加上virual关键字,即可把函数声明为虚函数;在C++中,一个基类指针可以用于指向它的派生类对象,而且通过这样的指针调用虚函数时,被调用的是该指针实际所指向的对象类的那个重定义版本。即若基类和派生类中存在一模一样的成员函数,通过该基类指针调用这样的成员函数时,若这个成员函数被定义成虚函数,那么就调用派生类中的;否则就调用基类中的。本题中,在f()函数中,此题中,void call()在基类中被声明为虚函数,在主函数中,语句Pet*pet1=new Dog("哈克"),*pet2=new Cat("吉米");定义了基类的指针per1和pet2,并让它们分别指向派生类对象Dog和Cat。所以通过该指针调用call()时运行的是派生类的版本,分别输出哈克和吉米;而通过该指针调用 getName()运行的是基类的版本,分别输出汪汪叫和喵喵叫。

  • 第8题:

    有如下程序:includeusing namespace std;class Publication{//出版物类char name[30]

    有如下程序: #include<iostream> using namespace std; class Publication{//出版物类 char name[30]; public: Publication(char*name="未知名称"){strcpy(this->name,name);} const char*getName( )const{return name;} //常数据成员 virtual const char*getType( )const{return"未知类型";}//虚常数据成员 }; class Book:public Publication{ //书类 public: Book(char*name):Publication(name){ } virtual const char*getType( )const{return"书";} //虚常数据成员 }; void showPublication(Publication &p){cout<<p.getType( )<<":"<<P.getName( )<<endl;} int main( ){ Book book("精彩人生"); showPublication(book); return 0; } 程序的输出结果是

    A.未知类型:未知名称

    B.未知类型:精彩人生

    C.书:未知名称

    D.书:精彩人生


    正确答案:D
    解析:在函数形参是基类对象,可以在函数调用时用派生类对象作为实参。此时基类对象只能调用自己的数据成员,但是virtual函数除外,该成员在派生类中被改写,在基类中仍然适用,故答案为D。

  • 第9题:

    有如下的程序:

    #include<strin9.h>

    #include<iostream.h>

    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
    B。【解析】C++语言中当一个新对象被另一个已存在的同类型对象初始化时要调用复制构造函数,语句"MyStringb(a);"符合此条件,将调用类MyString的复制构造函数,但是类MyString没有定义此复制构造函数,所以会出错。

  • 第10题:

    已知String类定义如下:

    class String

    {

    public:

    String(const char *str = NULL); // 通用构造函数

    String(const String &another); // 拷贝构造函数

    ~ String(); // 析构函数

    String & perater =(const String &rhs); // 赋值函数

    private:

    char *m_data; // 用于保存字符串

    };

    尝试写出类的成员函数实现。


    正确答案:

     

    String::String(const char *str)
    {
    if ( str == NULL ) //strlen在参数为NULL时会抛
    异常才会有这步判断
    {
    m_data = new char[1] ;
    m_data[0] = '\0' ;
    }
    else
    {
    m_data = new char[strlen(str) + 1];
    strcpy(m_data,str);
    }
    }
    String::String(const String &another)
    {
    m_data = new char[strlen(another.m_data) + 1];
    strcpy(m_data,other.m_data);
    }
    String& String::operator =(const String &rhs)
    {
    if ( this == &rhs)
    return *this ;
    delete []m_data; //删除原来的数据,新开一块内

    m_data = new char[strlen(rhs.m_data) + 1];
    strcpy(m_data,rhs.m_data);
    return *this ;
    }
    String::~String()
    {
    delete []m_data ;
    }

  • 第11题:

    下列语句中正确的是

    A.char*myString="Hello-World!";

    B.char myString="Hello-World!";

    C.char myString[11]=”Hello-World!”;

    D.char nlyString[12]="Hello-World!";


    正确答案:A
    解析:选项C、D的数组下标超界;对于选项B,不能将字符串赋值给字符,可以将一个字符串赋值给字符指针,指针指向字符数组的首地址。

  • 第12题:

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

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


    正确答案:B
    解析:类拷贝的相关内容。

  • 第13题:

    下列语句中,正确的是( )。

    A.char*myString="Hello-World!";

    B.char myString="Hello-World!";

    C.char myString[11]="Hello-World!";

    D.char myString[12]="Hello-World!";


    正确答案:A
    解析:选项A)中char*myString="Hello-World!"字符串的长度是12个字符加上一个尾符,所以是13,因此选项C)和选项D)申请的空间都不够,报数组溢出异常。而选项B)定义的变量myString为字符变量,不是用来存放字符串的,所以错误。

  • 第14题:

    ( 13 )有如下程序:

    #include <iostream>

    using namespace std;

    class GrandChild{

    public:

    GrandChild(){ strcpy (name,"Unknown"); }

    const char * getName()const { return name; }

    virtual char * getAddress()const=0;

    private:

    char name[20];

    };

    class GrandSon : public GrandChild{

    public:

    GrandSon{char *name} {}

    Char * getAddress() const { return "Shanghai";}

    };

    int main(){

    GrandChild *gs=new GrandSon("Feifei");

    cout<<gs->getName()<<" 住在 "<<gs->getAddress()<<endl;

    delete gs;

    return 0;

    }

    运行时的输出结果是 【 13 】 。


    正确答案:

  • 第15题:

    有以下程序: include using namespace std; constxntN=5; int fun(char*s,char a,int

    有以下程序:

    include <iostream>

    using namespace std;

    const xnt N=5;

    int fun(char *s,char a,int n)

    {

    int j;

    *s=a;j=n;

    while(a<s[j])

    j--;

    return j;

    }

    int main()

    {

    char s[N+1];

    int k;


    正确答案:3
    3 解析:函数fun()的功能是在字符数组s中找到大于或等于字符a第1个元素,并返回其下标值。在主函数中,通过for循环给字符数组s分别赋值B、C…J。然后通过调用函数fun(),找到字符'E'的位置。

  • 第16题:

    有如下的程序: #include<strin9.h> #include<iostream.h> 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
    B。【解析】C++语言中当一个新对象被另一个已存在的同类型对象初始化时要调用复制构造函数,语句"MyStringb(a);"符合此条件,将调用类MyString的复制构造函数,但是类MyString没有定义此复制构造函数,所以会出错。

  • 第17题:

    有如下程序:includeincludeusing namespace std;class MyString{public:My

    有如下程序: #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[1en+1]; strcpy(data,s); } int main( ){ MyString a("C++Progreanfing"); MyString b(A) ; return 0; } 在运行上面的程序时出错,错误的原因是

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

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

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

    D.系统不能生成缺失的复制构造函数


    正确答案:B
    解析:当类中的数据成员有指针时,必须使用深层复制构造函数,否则会发生指针悬挂。在进行函数析构时,会出现指针丢失现象。

  • 第18题:

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

  • 第19题:

    下列程序的输出结果是【】。 include include using namespace std; void fun(c

    下列程序的输出结果是【 】。

    include<iostream>

    include<cstring>

    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,ch);

    cout<<ch;

    return 0;

    }


    正确答案:C
    C

  • 第20题:

    下列程序的输出结果是______。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’。

  • 第21题:

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

  • 第22题:

    已知类 String 的原型为

    class string

    {

    public:

    string(const char *str=null);//普通构造函数

    string(const string &other);//拷贝构造函数

    ---string(void);

    string &operate=(const string &other);//赋值函数

    private:

    char * m-data;//用于保存字符串

    };

    请编写 string 的上述4 个函数


    正确答案:
     

  • 第23题:

    有如下的程序: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