niusouti.com

有如下程序:#include<iostream>using flamespace std;class Name{char name[20];public:Name(){strcpy(name,“”); cout<<‘?’;}Name(char*fname){strcpy(name,fname); cout<<‘?’;}};int main(){Name names[3]={Name(”张三”),Name(”李四”)};return 0;}运行此程序输出符号?的个数是A.0B.1C.2D.3

题目

有如下程序:

#include<iostream>

using flamespace std;

class Name{

char name[20];

public:

Name(){

strcpy(name,“”); cout<<‘?’;

}

Name(char*fname){

strcpy(name,fname); cout<<‘?’;

}

};

int main(){

Name names[3]={Name(”张三”),Name(”李四”)};

return 0;

}

运行此程序输出符号?的个数是

A.0

B.1

C.2

D.3


相似考题
参考答案和解析
正确答案:D
解析:定义了3个Name的对象,前2个定义带参数,执行第二个构造函数输出“?”,第三个定义没带参数,执行第一个构造函数也输出“?”;一共输出3个“?”,故选D)。
更多“有如下程序:#include&lt;iostream&gt;using flamespace std;class Name{char name[20];public:Na ”相关问题
  • 第1题:

    有如下程序: 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()运行的是基类的版本,分别输出汪汪叫和喵喵叫。

  • 第2题:

    有如下程序: #include<iostream> usingnamespacestd; className{ charname[20]; public: Name( ){ strcpy(name,"");cout<<?; } Name(char*fname){ strcpy(name,fname);cout<<?; } }; intmain( ){ Namenames[3]={Name(”张三”),Name(”李四”)); return0; } 运行此程序输出符号?的个数是( )。

    A.O

    B.1

    C.2

    D.3


    正确答案:D
    D。【解析】对有参与无参构造函数的调用。当names[2]为空时调无参构造函数,而names[0],names[1]调用有参构造函数,即输出3个“?”。

  • 第3题:

    有如下程序: #include<iostream> usingnamespacestd; className{ charname[20]; public: Name( ){ strcpy(name,"");cout<<'?'; } Name(char*fname){ strcpy(name,fname);cout<<'?'; } }; intmain( ){ Namenames[3]={Name(”张三”),Name(”李四”)); return0; } 运行此程序输出符号?的个数是( )。

    A.O

    B.1

    C.2

    D.3


    正确答案:D
    D。【解析】对有参与无参构造函数的调用。当names[2]为空时调无参构造函数,而names[0],names[1]调用有参构造函数,即输出3个“?”。

  • 第4题:

    有如下程序:includeusing namespace std;class Name{char name[20];public:Name( ){s

    有如下程序: #include<iostream> using namespace std; class Name{ char name[20]; public: Name( ){strepy(name," ");tout<<'?';} Name(char*fname){strcpy(name,fname);cout<<'?';} }; int main( ){ Name name[3]={Name("张三"),Name("李四")}; return 0; } 运行此程序输出符号“?”的个数是

    A.0

    B.1

    C.2

    D.3


    正确答案:D
    解析:Name name[3]定义了一个name对象数组,有3个元素,前2个调用Name(char *fname)构造函数,第三个元素调用Name( )构造函数,故打印3个“?”。

  • 第5题:

    有如下程序:includeusing namespace std;class Toy{public:Toy(char*_n){strcpy(name

    有如下程序: #include<iostream> using namespace std; class Toy{ public: Toy(char*_n){strcpy(name,_n);count++;} ~Toy(){count--;} char*GetName( ){return name;} static int getCount( ){return count;} private: char name[10]; static int count; }; int Toy::count=0: int main( ){ Toy tl("Snoopy"),t2("Mickey"),t3("Barbie"); cout<<t1.getCount( )<<endl; return 0; } 程序的输出结果是

    A.1

    B.2

    C.3

    D.运行时出错


    正确答案:C
    解析:静态数据成员是同一个类的不同对象之间的数据共享,无论创建多少个类,均只有一个静态数据成员,通过对静态数据成员的调用,实现了数据共享。本题创建了3个Toy对象,所以调用3次构造函数,count被增加3次,故sount=3。