有如下程序: #inClude<iostream> using namespaCe std; Class MyClass{ publiC: MyClass

题目

有如下程序: #inClude<iostream> using namespaCe std; Class MyClass{ publiC: MyClass(int X):val(X){} void PrintConst}tout<<”Const:val=”<<val<<’\t’;} void Print{tout<<”val=”<<val<<’\t’;} private: int val; }; int main{ Const MyClass objl(10); MyClass obj2(20); objl.Print; obj2.Print; retum 0; } 执行这个程序的输出结果是( )。

A.val=10 Const:val=20

B.Const:val=10 Const:val=20

C.Const:val=10 val=20

D.val=10 val=20

参考答案和解析
正确答案:C
本题考查常对象、常成员函数及构造函数。常对象只能调用常成员函数,普通对象调用普通成员函数。所以本题中obj1为常对象,执行obj1.print后,会执行常构造函数,输出const:val=10;而obj2为普通对象,执行obj2.print时,会执行默认构造函数,输出va1=20。放答案为C。
如果没有搜索结果或未解决您的问题,请直接 联系老师 获取答案。
相似问题和答案

第1题:

( 27 )有如下程序

#include

#include

using namespace std;

class MyClass{

public:

MyClass( ){ cout<<'A'; }

MyClass(char c){ cout<

~MyClass( ){ cout<<'B'; }

};

int main( ){

MyClass p1,*p2;

p2=new MyClass('X');

delete p2 ;

return 0;

}

执行这个程序屏幕上将显示输出

A ) ABX

B ) ABXB

C ) AXB

D ) AXBB


正确答案:D

第2题:

有如下程序 include include using namespace std; cla

有如下程序 #include <iostream> #include <iomanip> using namespace std; class MyClass { public: MyClass() { cout<<'A'; } MyClass(char c){ cout<<c; } ~MyClass(){ cout<<'B'; } }; int main( ) { MyClass p1,*p2; p2=new MyClass('X'); delete p2; return 0; } 执行这个程序屏幕上将显示输出

A.ABX

B.ABXB

C.AXB

D.AXBB


正确答案:D
解析:本题主要考查的是构造函数和析构函数。构造函数在对象被创建的时候由系统自动调用,而析构函数在对象的生存期即将结束的时候由系统自动调用。本例的main()函数中,第1条语句定义了一个MyClass对象和一个MyClass类型指针,此时创建了1个对象,因为没有构造参数,故会调用默认构造函数,输出一个'A'。第2条语句通过new运算符动态创建了1个MyClass对象,此时传入了一个构造参数'X',所以会调用相应的构造函数,输出一个'X'。第3条语句使用delete运算符释放了1个对象,所以会调用1次析构函数,输出一个'B'。最后,当main()函数结束时,局部变量p1的生存期结束,故还要调用1次析构函数输出一个'B'。因此,最终输出结果是AXBB,应该选择D。

第3题:

有如下程序

#include

#include

using namespace std;

class MyClass{

public:

MyClass(){cout<<’A”;}

MyClass(char c {cout<~MyClass(){sout<<’B”;}

};

Int main(){

MyClassp1,*p2

p2=new MyClass(‘X’);

delete p2;

return 0;

}

执行这个程序幕上将显示输出______。

A.ABX

B.ABXB

C.AXB

D.AXBB


正确答案:B

第4题:

有如下程序: include using namespace std; class MyClass { public:

有如下程序: #include <iostream> using namespace std; class MyClass { public: MyClass() { ++count; } ~MyClass() { --count; } static int getCount() { return count; } private: static int count; }; int MyClass::count=0; int main() { MyClass obj; cout<<obj.getCount(); MyClass *ptr=new MyClass; cout<<MyClass::getCount(); delete ptr; cout<<MyClass::getCount(); return 0; }程序的输出结果是

A.121

B.232

C.221

D.122


正确答案:A
解析:本题考查的知识点是:静态成员。对于类中的非静态数据成员,每一个类对象都拥有一个拷贝(副本),即每个对象的同名数据成员可以分别存储不同的数值,这是保证每个对象拥有区别于其他对象的特征的需要。而类中的静态成员则是解决同一个类的不同对象之间的数据和函数共享问题的。静态成员的特性是不管这个类创建了多少个对象,它的静态成员都只有一个拷贝(副本),这个副本被所有属于这个类的对象共享。这种共享与全局变量或全局函数相比,既没有破坏数据隐藏的原则,又保证了安全性。题目中,首先定义了一个obj对象,其构造函数使MyClass的静态数据成员count增1,所以第一条输出语句输出的结果是1。然后通过指针动态创建了一个MyClass类的对象,构造函数再次被调用,count变为2,所以第2次输出结果是2。接下来是用delete删除了刚才动态创建的MyClass对象,析构函数被调用,count减1变为1,第3次输出1。故本题的输出为121,选项A正确。

第5题:

( 27 )有如下程序:

#include<iostream>

using namespace std;

class MyClass{

public:

MyClass(){++count;}

~MyClass(){--count;}

static int getCount(){return count;}

private:

static int count;

};

int MyClass::count=0;

int main(){

MyClass obj;

cout<<obj.getCount();

MyClass*ptr=new MyClass;

cout<<MyClass::getCount();

delete ptr;

cout<<MyClass::getCount();

return 0;

}

程序的输出结果是

A ) 121

B ) 232

C ) 221

D ) 122


正确答案:A

第6题:

有以下程序 include using namespace std; class MyClass { public:

有以下程序 #include<iostream> using namespace std; class MyClass { public: MyClass(intn) {number=n;} //拷贝构造函数 MyClass (MyClass& other) {number=other.number;} ~MyClass(){} private: int number; }; MyClass fun (MyClass p) { MyClass temp(p); return temp; } intmain() { MyClass obj1(10),obj2(0); MyClass obj3(obj1); obj2=fun(obj3); return0; } 程序执行时,MyClass类的拷贝构造函数被调用的次数是

A.5

B.4

C.3

D.2


正确答案:B
解析:本题考核C++的拷贝构造函数。调用拷贝构造函数的情况为:一个新对象被另一个已存在的同类型对象初始化:当一个对象作为实参传递给函数时为初始化形参,要调用拷贝构造函数。在函数值返回时形参的生命期结束时它的结构函数被调用;在函数返回一个对象时调用拷贝构造函数。符合以上条件的有:用对象。obj1来初始化。obj3;obj3作为实参被传入;函数fun返回一个对象时;系统用返回值初始化一个匿名对象时调用了拷贝构造函数。总共调用4次。

第7题:

有如下程序: nclude using namespace Std; Class MyClass{ public:

有如下程序: #nclude<iostream> using namespace Std; Class MyClass{ public: MyClass(int i=0){cout<<1;} MyClass(constMyClass&x){cout<<2;} MyClass& perator=(const MyClass&x){cout<<3;return*this;} ~MyClass(){cout<<4;} }; int main(){ MyClass obj1(1),obj2(2),obj3(obj1); return 0: } 运行时的输出结果是( )。

A.112444

B.11114444

C.121444

D.11314444


正确答案:A
解析:此题考查的是函数重载。从主函数入手,定义了MyClass类的对象obj1(1),obj2(2)和obj3(obj1)。其中对象obj1和obj2中的参数为整型,因此调用构造函数MyClass(int i=O){cout1小输出11;对象obj3中的参数为对象obj1,所以调用构造函数MyClass(const MyClass&x){cout2;},输出2。在主函数退出时,调用析构函数~MyClassO{cout4;},清除对象。obj1,obj2和obj3,因此输出444,即答案为选项A)。

第8题:

有以下程序: include using namespace std; class MyClass { public: static int s; M

有以下程序:

include<iostream>

using namespace std;

class MyClass

{

public:

static int s;

MyClass();

void SetValue(int val);

};

int MyClass::s=0;

MyClass::MyClass()

{

S++;

}

void MyClass::SetValue(int val)

{

s=val;

}

int main()

{

MyClass my[3],*p;

p=my;

for(int k=0;k<3;k++)

{

p->SetValue(k+1);

p++;

}

cout<<MyClass::s<<end1;

return 0;

}

运行后的输出结果是______。


正确答案:3
3

第9题:

( 9 )已知如下程序的输出结果是 23 ,请将画线处缺失的部分补充完整。

#include<iostream>

using namespace std;

class MyClass {

public:

void Print()const{cout<<23;}

};

int main() {

MyClass*p=new MyClass();

___________.Print();

return 0;

}


正确答案:

第10题:

有如下程序:includeusing namespace std;class MyClass{public:MyClass(int x):val(x

有如下程序: #include<iostream> using namespace std; class MyClass{ public: MyClass(int x):val(x){} void Print()const{cout<<“const:val=”<<<val<<‘\’;} void Print(){cout<<“val=”<<val<<‘t’;} private: int va1; }; int main(){ cons

A.val=10 const:val=20

B.const:val=10 const:val=20

C.const:val=10 val=20

D.val=10 val=20


正确答案:B
解析: 本题考查提派生类中构造函数的定义。派生类的构造首先要调用基类的构造函数,对基类成员初始化;然后对派生类中的新增成员初始化。格式:派生类名(构造函数形参表)基类构造函数(形参表)。

更多相关问题