C++练习题目2013年6月.doc_第1页
C++练习题目2013年6月.doc_第2页
C++练习题目2013年6月.doc_第3页
C++练习题目2013年6月.doc_第4页
C++练习题目2013年6月.doc_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C+练习题目(18)下列程序的输出结果为 B#includevoid main() char *a=hello,the,world; char *pa=a; pa+; cout*paendl;A)helloB)theC)worldD)hellotheworld(21)下列程序的运行结果为 D#include void print(double a) cout+a;void print(int a,int b) coutba;void main() print(1.2); cout=C):D)/(35)下面程序的输出结果是 C#includeclass example int a;public: example(int b)a=b+; void print()a=a+1; couta ; void print()constcout asetNum(50);x+y类(11)下面关于类和对象的描述中,错误的是A)类就是C语言中的结构体类型,对象就是C语言中的结构体变量B)类和对象之间的关系是抽象和具体的关系C)对象是类的实例,一个对象必须属于一个已知的类D)类是具有共同行为的若干对象的统一描述体(20)不能作为重载函数的调用的依据是A)参数个数B)参数类型C)函数类型D)函数名称(22)在C+语言中,数据封装要解决的问题是A)数据的规范化 B)便于数据转换 C)避免数据丢失 D)防止不同模块之间数据的非法访问一个类中只能定义一个析构函数,否则会造成对同一对象的多次删除;而构造函数可以根据不同的参数个数和类型进行多次重载。(25)下面程序的运行结果为#includeclass A int num;public: A(int i)num=i; A(A &a)num=a.num+; void print()coutnum;void main() A a (1),b(a); a.print(); b.print();A)11B)12C)21D)22(28)可以用p.a的形式访问派生类对象p的基类成员a,其中a是A)私有继承的公有成员B)公有继承的私有成员C)公有继承的保护成员D)公有继承的公有成员 在继承中派生类的对象调用构造函数的顺序,应该是先调用基类的构造函数,然后是成员中的对象对应类的构造函数,最后是派生类自己的构造函数。基类中说明的虚函数,在派生类中自然就是虚函数,对于纯虚函数必须在后面继承的派生类中给出具体的实现;静态成员函数不能进行动态联编,所以虚函数不能是静态的。(35)下列程序的运行结果为#includeint i=0;class Apublic: A()i+;void main() A a,b3,*c; c=b; couti运行时(11)下面关于C+语言的描述错误的是A)C+语言支持数据封装B)C+语言中引入友元没有破坏封装性C)C+语言允许函数名和运算符重载D)C+语言支持动态联编解析: 数据封装就是数据抽象;友元可以访问类中的所有成员,是面向对象的一个重要特征,但是破坏了封装性;重载和动态联编都是面向对象的另一个特点-多态性。(17)存在定义int a10,x,*pa;,若pa=&a0,下列的哪个选项和其他3个选项不是等价的?A)x=*pa;B)x=*(a+1);C)x=*(pa+1);D)x=a1;(18)下面程序的运行结果为#include void swap(int &a,int b) int temp; temp=a+; a=b; b=temp;void main() int a=2,b=3; swap(a,b); couta,bendl;A)2,3B)3,2C)2,2D)3,3(19)一个函数功能不太复杂但要求被频繁调用,应选用A)内联函数B)重载函数C)递归函数D)嵌套函数对象属于某个已知的类,是类的实例,对象之间通信实际上就是通过函数传递信息,封装是把数据和操作结合在一起,继承是对于类的方法的改变和补充,重载是多态性之一。 析构函数可以被函数调用,也可以系统调用:函数体内的对象在函数结束时调用析构函数和使用delete释放对象所占有用的资源。(25)下面程序的运行结果为#includeclass A static int n;public: A()n=1; A(int num)n=num; void print()coutn;int A:n=2;void main() A a,b (3); a.print(); b.print(); coutendl;A)11B)13C)23D)33本题考察的是静态数据成员的使用,n为类A的静态成员,即为类A的所有对象共有的成员,所以,当对象b把n初始化为3时,对象a的成员n的值也为3(这两个n实际上是同一个)。友元函数是独立于当前类的外部函数,但它可以访问该类的所有对象的成员;拷贝构造函数是使用已存在的对象初始化正在生成的对象时调用的成员函数。 (29)下面程序的运行结果是#includeclass baseprotected: int a;public: base()cout0;class base1:virtual basepublic: base1()cout1;class base2:virtual basepublic: base2()cout2;class derived:public base1,public base2public: derived()cout3;void main() derived obj; coutendl;A)0123B)3120C)0312D)3012 (30)对于类定义 class A public: virtual void func1() void func2() ; class B:public A public: void func1()coutclass B func 1end1; virtual void func2()coutclass B func 2end1; ;下面正确的叙述是A) A:func2()和B:func1()都是虚函数B) A:func2()和B:func1()都不是虚函数C) B:func1()是虚函数,而A:func2()不是虚函数D) B:func1()不是虚函数,而A:func2()是虚函数解析: 基类中说明的虚函数,在派生类中自然就是虚函数,所以类B中func1()是虚函数;而类A中的func2没有被关键字virtual修饰,所以不是虚函数。(31)下面关于运算符重载的描述错误的是A)运算符重载不能改变操作数的个数、运算符的优先级、运算符的结合性和运算符的语法结构B)不是所有的运算符都可以进行重载C)运算符函数的调用必须使用关键字operatorD)在C+语言中不可通过运算符重载创造出新的运算符解析: 例如:运算符就不能被重载;通过重载可以创造新的运算方式,但是不能臆造新的运算符;定义的时候必须使用关键字operator,而调用时可直接使用运算符。 (35)下列程序的运行结果为#includetemplateclass FF TT a1, a2, a3; public: FF(TT b1, TT b2, TT b3)a1=b1; a2=b2; a3=b3; TT Sum()return a1+a2+a3;void main() FF x(int(1.1),2,3),y(int(4.2),5,6); coutx.Sum() y.Sum()endl;A)6.1 15.2B)6 15C)6 15.2D)6.1 15111718192529303135BADADACCB(6)C+中封装性、继承性和 【6】 是面向对象思想的主要特征。(10)C+程序是从 【10】 函数开始执行的。(11)假定A为一个类,则语句A(A &a);为该类 【11】 函数的原型说明。(12)派生类构造函数的执行顺序是先执行 【12】 的构造函数,然后执行成员对象的构造函数,最后执行 【13】 的构造函数。多态性Main拷贝构造基类 派生类(20)函数fun的返回值是fun(char *a,char *b) int num=0,n=0;while(*(a+num)!=0)num+;while(bn)*(a+num)=bn;num+;n+;return num;A)字符串a的长度B)字符串b的长度C)字符串a和b的长度之差D)字符串a 和b的长度之和(22)下面程序的结果为#includeint c;class A private:int a;static int b;public:A()a=0; c=0;void seta()a+;void setb()b+;void setc()c+;void display()cout a b c;int A:b = 0;void main() A a1,a2;a1.seta();a1.setb();a1.setc();a2.seta();a2.setb();a2.setc();a2.display();A)1 2 1B)1 2 2C)1 1 2D)2 2 2解析: C+语言中全局变量是任何函数都可以改变的量,静态变量的有效范围在定义它的类中,而普通的变量的有效性只在使用它的函数中,在本题中c为全局变量,b为静态变量,a为普通变量,b和c在类A的对象a1和a2中都自加1。所以b,c为2,a为1。(24)下列关于构造函数说法不正确的是A)构造函数必须与类同名B)构造函数可以省略不写C)构造函数必须有返回值D)在构造函数中可以对类中的成员进行初始化(25)如果友元函数重载一个运算符时,其参数表中没有任何参数则说明该运算符是A)一元运算符B)二元运算符C)选项A)和选项B)都可能D)重载错误解析: C+中用友元函数重载运算符至少有一个参数,重载一目运算符要有一个参数,重载二目运算符要有两个参数。(26)在重载一个运算符时,如果其参数表中有一个参数,则说明该运算符是A)一元成员运算符B)二元成员运算符C)一元友元运算符D)选项B)和选项C)都可能解析: C+语言中用成员函数重载时,重载一目运算符没有参数,重载二目运算符要有一个参数。(27)下列关于模板的说法正确的是A)模板的实参在任何时候都可以省略B)类模板与模板类所指的是同一概念C)类模板的参数必须是虚拟类型的D)类模板中的成员函数全部都是模板函数解析: 在C+中规定如果一个类被声明为类模板,那么其中的所有成员函数就都成为了模板函数。(28)表示在输出时显示小数位,和在文件输入时判断文件尾的函数分别是A)showbase()和eof()B)showpoint()和eof()C)showpoint()和bad()D)showpoint()和good()(35)下面程序的输出结果是#include#includevoid main() char p110,p210;strcpy(p1,abc); strcpy(p2,ABC); char str50= xyz;strcpy(str+2,strcat(p1,p2);cout str;A)xyzabcABCB)zabcABCC)xyabcABCD)yzabcABC2022242526272835DBCDDDBC(6)派生类的成员一般分为两部分,一部分是 【6】 ,另一部分是自己定义的新成员。从基类继承的成员(11)C+语言中标点符号中表示一条预处理命令开始的是A)#B);C)*D)(27)对于下面的程序ifstream fin(c:test.txt);if(fin)cout ok;elsecout wrong;对于if语句中的内容可以换为A)fin.fail();B)fin.bad();C)fin.good();D)fin.eof();解析: C+语言中判断文件操作成功主要有两个函数good()和fail(),其中if(文件流名good()和if(!文件流名fail(),还有if(文件流名)都可以表示判断文件操作是否成功。(30)有如下程序#includevoid main() char ch25=6937,8254,*p2;int i,j,s=0;for(i=0;i2;i+)pi=chi;for(i=0;i0;j+=2)s=10*s+pij-0;cout s;该程序的输出结果是A)69825B)63825C)6385D)693825(25)有如下函数模板定义: template T func(T x,T y) return x*x+y*y; 在下列对 func 的调用中,错误的是 A)func(3,5); B)func(3.0,5.5); C)func(3,5.5); D)func(3,5.5); (28)下列关于 this 指针的叙述中,正确的是A)任何与类相关的函数都有 this 指针 B)类的成员函数都有 this 指针 C)类的友元函数都有 this 指针 D)类的非静态成员函数才有 this 指针 C+中用成员函数重载x*y为:x. operator*(y),用友元函数重载x*y为:operator*(x,y)1125272830ACCDC(11)下列程序的输出结果为 2,请将程序补充完整。 #include using namespace std; class Base public: _void fun()cout1; ; class Derived:public Base public: void fun()coutfun(); delete p; return 0; Virtual(23)有如下程序: #include using namespace std; class Base public: void fun() coutBase:funendl; ; class Derived : public Base public: void fun() _ coutDerived:funfun(); D)fun(); (27)有如下类定义: class Foo public: Foo(int v) : value(v) / Foo() / private: Foo() / int value = 0; / ; 其中存在语法错误的行是 A) B) C) D)(28)有如下类定义: class Point int x_, y_; public: Point(): x_(0), y_(0) Point(int x, int y =0): x_(x), y_(y) ; 若执行语句 Point a(2), b3, *c4; 则 Point 类的构造函数被调用的次数是 A)2 次 B)3 次 C)4 次 D)5 次(30)有如下程序: #include using namespace std; class A public: A() cout A; A() cout A; ; class B : public A A* p; public: B() cout B; p = new A(); B() cout B; delete p; ; int main() B obj; return 0; 执行这个程序的输出结果是 A)BAAABA B)ABABAA C)BAABAA D)ABA ABA (33)有如下程序: #include using namespace std; class Complex double re, im; public: Complex(double r, double i) : re(r), im(i) double real() const return re; double image() const return im; Complex& operator += (Complex a) re += a.re; im += a.im; return *this; ; ostream& operator (ostream& s, const Complex& z) return s(z.real(),z.image(); int main() Complex x(1,-2), y(2,3); cout (x+=y) endl; return 0; 执行这个程序的输出结果是 A)(1,-2) B)(2,3) C)(3,5) D)(3,1)(35)有如下类声明: class SAMPLE int n; public: SAMPLE(int i=0):n(i) void setValue(int n0); ; 下列关于 getValue 成员函数的实现中,正确的是 A) SAMPLE:setValue(int n0) n=n0;B)void SAMPLE:setValue(int n0) n=n0; C)void setValue(int n0) n=n0; D)(int n0) n=n0;(11)有如下程序: #include using namespace std; class ONE public: virtual void f() cout 1; ; class TWO : public ONE public: TWO() cout 2; ; class THREE : public TWO public: virtual void f() TWO:f(); cout f(); return 0; 执行上面程序的输出是_。(12)有如下程序: #include using namespace std; class PARENT public: PARENT() cout PARENT; ; class SON : public PARENT public: SON() cout SON; ; int main() SON son; PARENT *p; p = &s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论