999kao.com
福师《C++语言程序设计》在线作业一答案

假定AA为一个类,a为该类私有的数据成员,GetValue( )为该类公有函数成员,它返回a的值,x为该类的一个对象,则访问x对象中数据成员a的格式为( )。

A.x.a

B.x.a()

C.x和gt;GetValue()

D.x.GetValue()


参考答案:D


一个类的友元函数能够访问该类的

A.私有成员

B.保护成员

C.公用成员

D.所有成员


正确答案:D
解析:在一个类的内部声明,并用friend修饰的函数称为该类的友员函数,友员函数可以像成员函数一样,访问类的所有级别的成员。友员机制主要用于提高访问效率,但是破坏了类的封装性原则。在程序中适当使用友员函数,并寻求封装和效率之间的一个平衡点,是使用友员技术的一个主要内容。


下面是类MyClass的定义,对定义中各种语句描述正确的是( )。

class MyClass { publiC: void MyClass(int a) //①

{ x=a; ) int func(int a,int b) //②

{ x=a; y=b; } int func(int a,int b,int c=0) //③

{ x=a; y=b; z=c; } static void resetValue() //④

{ x=0; } private: int X,y,Z; };

A.语句①是类MyClass的构造函数定义

B.语句②和语句③实现类成员函数的重载

C.语句④实现对类成员变量x的清零操作

D.语句①、②、③和④都不正确


正确答案:D
解析:类的构造函数没有返回类型,所以语句①是错误的;语句②和语句③将会使函数func()的调用产生歧义;成员函数resetValue()是静态成员函数,那么它不能访问类MyClass中的非静态数据成员,所以语句④也不正确。


设int x:,则经过______ 后,语句*px=0;可将x值置为0。

A.int*px;

B.int const *px=&x;

C.int* const px=&x:

D.const int *px=&x;


正确答案:B
解析:因为*p1=a:所以a必然为指针类型,p2=*b,*b为指针类型,而b必然是指向指针的指针,a和b的类型分别是int*和int**。


一个类的友元函数或友元类可以访问该类的( )。

A.私有成员

B.所有成员

C.保护成员

D.公有成员


正确答案:B
解析:在C++中,如果想让类中的成员数据可以被其他函数访问,可以通过友元函数声明,来共享类中的资源。友元类函数对类的属性和方法的访问能力等同于类的成员函数。


福师C 语言程序设计在线作业一-0003试卷总分:100 得分:100一、单选题 (共 20 道试题,共 40 分)1.下列语句中不是死循环的是_。A.int i=1;for(;)ii+1;B.int i10; while(1) i-; if(i=1)break; C.int i0; do i+;while(i=0)D.for( int i1:i10;i+) i-; 答案:B2.一个类的友元函数或友元类能够通过成员操作符访问该类的( )A.私有成员B.所有成员C.公有成员D.保护成员答案:B3.虚函数使用关键字_。( )A.virtualB.staticC.publicD.private答案:A4.设int x;,则经过( )后,语句*px=0;可将x值置为0。A.int const * px=&x;B.int * px;C.int * const px=&x;D.const int * px=&x;答案:C5.下面列出的保留字中,不能作为函数的返回类型的是( )A.voidB.newC.longD.int答案:B6.设void f1(int * m,long & n);int a;long b;则以下调用合法的是( )。A.f1(a,b);B.f1(a,&b);C.f1(&a,b);D.f1(&a,&b);答案:C7.下面程序错误的语句是_。 #includevoid main()int*pnew int1;p=9;cout *pdeletep A.B.C.D.答案:C8.下列标识符中,()是文件级作用域。A.语句标号B.自动态标识符C.外部静态标识符D.函数形参答案:C9.下列( )是正确的语句。A.x+yB.outnC.;D.=17答案:C10.假定要对类AB定义加号操作符重载成员函数,实现两个AB类对象的加法,并返回相加结果,则该成员函数的声明语句为:A.operator+(AB a)B.AB operator+(AB & a , AB & b)C.AB operator+(AB & a)D.AB & operator+( )答案:C11.当使用fstream流类定义一个流对象并打开一个磁盘文件时,文件的隐含打开方式为()。A.以上都不对B.ios:outC.ios:in|ios:outD.ios:in答案:A12.对类成员访问权限的控制,是通过设置成员的访问控制属性实现的,下列不是访问控制属性的是_。A.私有类型B.友元类型C.公有类型D.保护类型答案:B13.下列do-while循环的循环次数是( ): 已知:int i=5 do couti-endl i- while (i!=0)A.无限次B.5C.2D.0答案:A14.不能作为重载函数的调用的依据是_。A.参数个数B.参数类型C.函数类型D.函数名称答案:C15.如果类A被说明成类B的友元,则()。A.类B的成员即类A的成员B.类B不一定是类A的友元C.类A的成员即类B的成员D.类A的成员函数不得访问类B的成员答案:B16.对类的构造函数和析构函数描述正确的是()。A.构造函数可以重载,析构函数不能重载B.构造函数不能重载,析构函数可以重载C.构造函数可以重载,析构函数也可以重载D.构造函数不能重载,析构函数也不能重载答案:A17.如果友元函数重载一个运算符时,其参数表中没有任何参数则说明该运算符是()。A.重载错误B.都可能C.二元运算符D.一元运算符答案:B18.下列关于函数模板和模板函数的描述,错误的是( )A.模板函数是一个实在的函数B.模板函数在编译时不生成可执行代码C.函数模板是定义重载函数的一种工具D.函数模板是一组函数的模板答案:B19.静态成员函数仅能访问( )A.非静态的数据成员B.非静态的成员函数C.静态的数据成员D.以上都不对答案:C20.表达式9!=10的值为( )A.非零值B.trueC.1D.0答案:C二、判断题 (共 20 道试题,共 40 分)21.表达式8&3的结果是1。答案:错误22.假设所有变量均为整型,则表达式(a=2,b=5,b+,a+b)的值是8。( )答案:正确23.C+语言的参数传递机制包括传值和传地址两种,如果调用函数时,需要改变实参或者返回多个值,应该采取传地址方式。答案:正确24.声明一个结构并不分配内存,内存分配发生在定义这个新数据类型的变量中。( )答案:正确25.如果派生类的成员函数的原型与基类中被定义为虚函数的成员函数原型相同,那么,这个函数自动继承基类中虚函数的特性。答案:正确26.字符型数据在内存中的存储形式是ASCII码( )答案:正确27.用new动态申请的内存是在堆中分配的,而不是在栈中分配的。答案:正确28.输出字符指针就是输出字符串。答案:正确29.若一全局变量只允许本程序文件中的函数使用,则定义它时应加上修饰符 void。答案:错误30.在基类中被说明为虚函数的类的成员函数必须在每个派生类中说明为虚函数,才能具有多态的特征。答案:错误31.头文件中一般存放着变量和常量的定义、函数的原型以及类的定义。答案:错误32.C+语言程序中,main()函数必须放在程序开始的部分( )答案:错误33.float和double类型的大小分别为4和8。答案:正确34.一个类的对象只有一个。答案:错误35.16位计算机中整型占4个字节存储空间。答案:错误36.C+中,一个函数必须在函数声明后才能使用( )答案:正确37.定义全局变量要在程序开始时进行,并且放在所有函数的外面,静态局部变量要在函数内部定义,但生命期却随函数的第一次被调用而产生。( )答案:正确38.关键字friend用于声明友元。答案:正确39.在使用C语言库函数时,要用预编译命令“#include”将有关的头文件包括到用户源文件中。( )答案:正确40.继承的方式有公有继承、私有继承两种。答案:错误三、多选题 (共 10 道试题,共 20 分)41.下列说法中错误的是_。A.不允许设置参数的默认值B.设置参数的默认值只能在定义函数时设置C.设置参数的默认值时,应该设置右边的参数D.设置参数的默认值时,应该全部参数都设置答案:ABD42.在进行完成任何C+流的操作后,都可以用C+流的有关成员函数检测流的状态;其中不能用于检测输入流状态的操作函数名称是_。A.failB.eofC.bad

下列关于成员访问权限的描述中,不正确的是( )。

A.公有数据成员和公有成员函数都可以被类对象直接处理

B.类的私有数据成员只能被公有成员函数以及该类的任何友元类或友元函数访问

C.只有类或派生类的成员函数和友元函数可以访问保护成员

D.保护成员在派生类中可以被访问,而私有成员不可以


正确答案:B
解析:类的私有数据成员也可以被类成员函数访问,不管是公有、私有或是保护成员,所以选项B是错误的,其他选项是正确的。


interface A{

int x = 0;

}

class B{

int x =1;

}

class C extends B implements A {

public void pX(){

System.out.println(x);

}

public static void main(String[] args) {

new C().pX();

}

}


正确答案:

 

错误。在编译时会发生错误(错误描述不同的JVM 有不同的信息,意思就是未明确的

x 调用,两个x 都匹配(就象在同时import java.util 和java.sql 两个包时直接声明Date 一样)。

对于父类的变量,可以用super.x 来明确,而接口的属性默认隐含为 public static final.所以可

以通过A.x 来明确。


下面的语句中错误的是( )。

A.int a=5;int x[a];

B.eonst int a=5;int x[a];

C.int n=5;int *P=new int[a];

D.const int n=5;int *p=new int[a];


正确答案:A
在c++中定义数组时,数组的范围参数在静态定义时必须是一个常数,而在动态分配内存定义时可以是常数,也可以是一个赋了值的参数故选项A是错误的定义方法。


下面的语句中错误的是( )。

A.int a=5;int x[a];

B.const int a=5;int x[a];

C.int n=5;int *p=new int[n];

D.const int n=5;int *p=new int[a];


正确答案:A


有如下程序: include using namespace std; class point {int x,y; public:point( i

有如下程序: #include <iostream> using namespace std; class point { int x, y; public: point( int vx, int vy ) { x = vx; y = vy; } point ( ) { x = 0; y = 0; } point operator+( point pl ) { point p; int px = x + p1.x; int py = y + p1.y; return point( px, py ); } point operator-( point p1 ) { point p; int px = x - p1.x; int py = y - p1.y; return point( px, py ); } void print() { cout<<x<<", "<<y<<end1; } }; int main () { point pl ( 10, 10 ), p2 ( 20, 20 ); p1 = p1 + p2; p1.print (); return 0; } 执行后的输出结果是( )。

A.10,10

B.20,20

C.10,20

D.30,30


正确答案:D
解析:本题主要考察C++中运算符重载的机制与实现。运算符重载函数一般分为成员函数形式和友元函数形式,这两种形式都可以访问类中的私有成员。本题中的运算符重载形式为成员函数形式。程序在类point中声明了私有数据成员intx和inty,并定义了两种形式的构造函数以完成对对象的初始化:之后,程序对运算符“+”进行了重载,令其输入参数为类point的对象,输出为操作符“+”右侧该对象的私有数据成员x和y与操作符“+”左侧同类型对象的私有数据成员x和y的两数之和;print()函数则输出对象中数据成员的值。主函数中,实例化了类point的两个对象p1和p2,并完成对对象的初始化。在语句“p1=p1+p2;”中,由于操作符“+”左右两端的操作数为point类的对象,复合类point定义中的操作符“+”的重载函数,因此程序将调用重载后的操作符函数,并返回两point对象数据成员的加和值,覆盖对象p1的数据成员。因此print()函数输出对象p1的数据成员值应该为:x=10+20=30,y=10+20=30。

更多 “福师《C++语言程序设计》在线作业一答案” 相关考题
考题 单选题假定AA为一个类,a为该类公有的数据成员,px为指向该类对象的一个指针,则访问px所指对象中数据成员a的格式为()。A px(a)B px[a]C px->aD px.a正确答案:D解析:暂无解析

考题 单选题假定AA为一个类,a为该类公有的数据成员,px为指向该类对象的一个指针,则访问px所指对象中数据成员a的格式为()Apx(a)Bpx[a]Cpx->aDpx.a正确答案:D解析:暂无解析

考题 一个类的友元函数能够访问该类的( )A.私有成员 B.保护成员 C.公有成员 D.所有成员答案:D解析:

考题 假定AA为一个类,a为该类公有的数据成员,px为指向该类对象的一个指针,则访问px所指对象中数据成员a的格式为( )。A.px( )B.px[a]C.px->aD.px.a正确答案:C

考题 有如下程序:includeusing namespace std;class point{int x,y;public:point(int vx,i有如下程序: #include<iostream> using namespace std; class point { int x,y; public: point(int vx,int vy) { x=vx; y=vy; } point() { x=0; y=0; } point operator+(point p1) { point p; int px=x+p1.x; int py=y+p1.y; return point(px,py); } point operator-(point p1) { point p; int px=x-p1.x; int py=y-p1.y; return point(px,py); } void print() { cout<<x<<","<<y<<end1; } }; int main() { point p1(10,10),p2(20,20); p1=p1+p2; p1.print(); retrun 0; } 执行后的输出结果是A.10,10B.20,20C.10,20D.30,30正确答案:D解析:本题主要考查C++中运算符重载的机制与实现。运算符重载函数一般分为成员函数形式和友元函数形式,这两种形式都可以访问类中的私有成员。本题中的运算符重载形式为成员函数形式。程序在类point中声明了私有数据成员intx和inty,并定义了两种形式的构造函数以完成对对象的初始化;之后,程序对运算符“+”进行了重载,另其输入参数为类point的对象,输出为操作符“+”右侧该对象的私有数据成员x和y与操作符“+”左侧同类型对象的私有数据成员x和y的加和:print()函数则输出对象中数据成员的值。程序main()函数中,实例化了类point的两个对象p1和p2,并完成对对象的初始化。在语句“p1=p1+p2;”中,由于操作符“+”左右两端的操作数为point类的对象,复合类point定义中的操作符“+”的重载函数,因此程序将调用重载后的操作符函数,并返回两point对象数据成员的加和值,覆盖对象p1的数据成员。因此print()函数输出对象p1的数据成员值应该为:x=10+20=30,y=10+20=30

考题 执行以下语句的结果为______。 int x=3,y;int*px=&x;y=*px++;A.x=3,y=4B.x=3,y=3C.x=4,y=4D.x=3,y不知正确答案:B解析:++和*的运算优先级别相同,且从右到左结合,y=*px++也就是y=*(px++),++运算只对px有效。这里++是后置的,应当先将px所指向的变量*px(也就是变量x)的值赋给变量y,然后px才增1。

考题 假定AA为一个类,a为该类私有的数据成员,GetValue()为该类公有函数成员,它返回a的值,x为该类的一个对象,则访问x对象中数据成员a的格式为()A、 x.aB、 x.a()C、 x->GetValue()D、 x.GetValue()正确答案:D

考题 类A有如下成员函数:int A::fun(double x){return (int) x/2;}int A::fun(int x){return x*2;}设a为类A的对象,在主函数中有int s=a.fun(6.0)+a.fun(2),则执行该语句后,s的值为()。正确答案:7

考题 下面的语句中错误的是A.int a = 5; int x[a]; B.const int a = 5; int x[a]; C.int n = 5; int *p = new int [a]; D.const int n = 5; int *p = new int [a];答案:A解析:在C++中定义数组时,数组的范围参数在静态定义时必须是一个常数,而在动态分配内存定义时可以是常数,也可以是一个赋了值得参数。故选项A)是错误的定义方法。

考题 假定AA为一个类,a为该类公有的数据成员,px为指向该类对象的一个指针,则访问px所指对象中数据成员a的格式为()A、 px(a)B、 px[a]C、 px->aD、 px.a正确答案:C