1、C+期末练习题 答案C+期末练习题一、选择题1、使用值传递方式将实参传给形参,下列说法正确的是( A )A.形参是实参的备份 B.实参是形参的备份C.形参和实参是同一对象 C.形参和实参无联系2、在函数调用时,如某一默认参数要指明一个特定值,则有( B )A.其之后的参数都必须赋值 B.其之前的参数都必须幅值C.其前后所有参数都必须幅值 D.其前后所有参数都不必赋值3、int Func(int, int);不可与下列哪个函数构成重载( B )A.int Func(int, int, int); B.double Func(int, int);C.double Func(double, doub
2、le); D.double Func(int, double);4、类的私有成员可在何处访问( D )A.通过子类的对象访问 B.本类及子类的成员函数中 C.通过该类对象访问 D.本类的成员函数中填空题5、this指针存在的目的是( B )A保证基类公有成员在子类中可以被访问B保证每个对象拥有自己的数据成员,但共享处理这些数据成员的代码一、保证基类保护成员在子类中可以被访问D保证基类私有成员在子类中可以被访问6、在编译指令中,宏定义使用哪个指令( B )A#include B#define C#if D#else7、设类A将其它类对象作为成员,则建立A类对象时,下列描述正确的是( B )AA类
3、构造函数先执行 B成员构造函数先执行 C两者并行执行 D不能确定8、对类中声明的变量,下列描述中正确的是( C )A属于全局变量 B只属于该类 C属于该类,某些情况下也可被该类不同实例所共享D任何情况下都可被该类所有实例共享9、构造函数是在( B )时被执行的。A.程序编译 B.创建对象C.创建类 D.程序装入内存10、假设已经定义好了类Student,现在要定义类Derived,它是从Student私有派生,则定义类Derived的正确写法是( D ) A.class Derived : Student private / B.class Derived : Student public /
4、 C.class Derived : public Student / D.class Derived : private Student / 二、填空题1、面向对象六大设计原则为: 单一职责原则 、 接口隔离原则 、 依赖倒转原则 、 里氏替换原则 、 开闭原则 、 迪米特法则 。2、在 C+ 程序设计中,建立继承关系倒挂的树应使用 单一 (或单) 继承。3、在一个类中可以对一个操作符进行 函数 重载。4、当建立 对象 时,程序自动调用该类的构造函数。5、设px是指向一个类动态对象的指针变量,则执行”delete px;”语句时,将自动调用该类的 析构函数 。6、若需要把一个函数”void
5、F();”定义为一个类AB的友元函数,则应在类AB的定义中加入一条语句: friend void F(); 7、在面向对象的程序设计中,通过 类 实现数据隐藏;通过 继承 实现代码的复用。8、在C+中,定义重载函数时,应至少使重载函数的 参数个数 或 参数类型 不同。9、在C+类中,有一种不能定义对象的类,这样的类只能被继承,称之为 抽象类 ,定义该类至少具有一个 纯虚函数 。10、允许访问一个类的所有对象的私有成员、公有成员和保护成员的函数是该类的 成员函数 和 友员函数 。11、在C+中,用 数组 、 指针 、和 引用 作为函数参数,能够将参数值带回。12、在C+中,虽然友元提供了类之间数
6、据进行访问的一种方式,但它破坏了面向对象程序设计的 封装 特性。13、C+中,对象保存在内存中, 栈内存 是自动分配和释放的,而 堆内存 需要用户自己申请和释放。14、执行完C+程序中的三条语句: int a, b, *c=&a; int * &p = c; p = &b; 后c指向 b 。15、在已经定义了整型指针 ip 后,为了得到一个包括 10 个整数的数组并由 ip 所指向,应使用语句 ip=new int 10; 。三、程序阅读1、给出下面程序的输出结果。 #include using namespace std; template T min(T ml,T m2) return(m
7、1m2) ? ml:m2; void main( ) cout min (1,7) t min (2.0,5.0)endl; cout min (y,bt min (A,a)endl; 答案:1 2b A2、给出下面程序的输出结果。 #include using namespace std; class A public: int x; A( ) A(int a)x=a; int get(int a)return x+a; ; void main( ) A a(8); int(A:*p)(int); p=A:get; cout(a.*p)(5)endl; A*pi=a; cout*P)(7)e
8、ndl; 答案:13153、程序的输出结果如下: 1,9 50,30 请根据输出数据在下面程序中的下划线处填写正确的语句。 源程序如下: #include using namespace std; class base private: int m; public: base( ) ; base(int a):m(a) int get( )return m; void set(int a)m=a; ; void main() base*ptr=new base2; ptr- set(30); ptr= _ ptr+1; _; ptr- set(50); base a2=1,9; couta0.
9、get( ),a1.get( )endl; coutget( ),; ptr=ptr-1; coutget( ) _endl; delete ptr; 4、在下划线处填上缺少的部分。 #include #include using namespace std; class complex public: int real; int imag; complex(int r=0,int i=0) real=r; imag=i; ; complex operator+(_ complex&a _,complex& b) int r=a.real+b.real; int i=a.imag+b.imag
10、; return_ complex(r,i) _; void main( ) complex x(1,2),y(3,4),z; z=x+y; coutz.real+z.imagiendl; 四、编程题1、在三角形类triangle实现两个函数,功能是输入三个顶点坐标判断是否构成三角形。要求使用下方point类来存储三个顶点坐标。class point private:float x,y; public:point(float a,float b)x=a;y=b; point( )x=0;y=0; , void set(float a,float b)x=a;y=b; float getx( )
11、return x; float gety( )return y; ;(判断三条边能构成三角形的条件:任意两边之和大于第三边或任意两边之差小于第3边。)答案: #include #include #include “point.h”class triangleprivate:point x,y,z;float s1,s2,s3;public:triangle(float x1,float y1,float x2,float y2,float x3,float y3);/用于输入三个顶点坐标 bool test();/用于判断是否构成三角形; triangle: triangle (float x
12、1,float y1,float x2,float y2,float x3,float y3)x.set(x1,y1); y.set(x2,y2); z.set(x3,y3); void triangle:test() s1=sqrt(x.getx()-y.getx()*(x.getx()-y.getx()+(x.gety()-y.gety()*(x.gety()-y.gety(); s2=sqrt(x.getx()-z.getx()*(x.getx()-z.getx()+(x.gety()-z.gety()*(x.gety()-z.gety(); s3=sqrt(y.getx()-z.get
13、x()*(y.getx()-z.getx()+(y.gety()-z.gety()*(y.gety()-z.gety();if(s1+s2s3)&(s1+s3s2)&(s2+s3s1)| (abs(s1-s2)s3)&(abs(s1-s3)s2)&(abs(s3-s2)s1) cout“三个顶点能构成三角形”; return true;elsecoutnext=NULL)returnhead;p=head-next;head-next=NULL;while(p!=NULL) temp1=head;head=p;temp2=p;p=p-next;temp2-next=temp1;return h
14、ead;3、定义并实现一个字符栈类Stack,数据成员包括一个存放字符的数组stck和一个栈指针tos,栈数组的大小由常量SIZE确定。要求:1)实现栈的基本操作Push()和Pop(),注意判断栈满和栈空的情况2)实现c_count()方法计算字符ch出现的次数,如果ch不出现,则返回03)实现inverse()方法使数组元素按逆序排列答案:const int SIZE=100;class Stackprivate: char stckSIZE; int tos;public: Stack():tos(0); void Push(char ch); char Pop(); int c_cou
15、nt(char ch); void inverse();void Stack:Push(char ch) if(tos=SIZE) cout”nStack is fulln”; else stcktos=ch; tos+; char Stack:Pop() if(tos=0) cout 0 ) temp-; if(stcktemp=ch) count+; return count;void Stack:inverse() char *p=new chartos; for(int i=0;i=tos-1;i+) pi=ai; for(int i=0;i=tos-1;i+) ai=atos-i-1
16、; delete p;4、小明开了一家面馆,菜单包括:牛肉面、羊肉面、臊子面、西红柿鸡蛋面等。请你设计服务员类、厨房类、面条类、牛肉面、羊肉面等,模拟点单制作面条的全过程。因为菜单上面条种类一直在变化更改,因此要求使用设计模式工厂模式,来减少后期代码修改的工作量。要求:1)要求使用继承实现 2)要求使用工厂设计模式 3)编写main()方法进行测试答案:#pragma once#include using namespace std;class Noodleprivate: string n_type;public: Noodle(string _n_type) :n_type(_n_type
17、) ; virtual Noodle(); virtual void make(); virtual void cooking(); virtual void sauce();#include Noodle.hNoodle:Noodle()void Noodle:make() cout n_type.c_str() 制作中,开始擀面条 endl;void Noodle:cooking() cout n_type.c_str() 制作中,开始煮面条 endl;void Noodle:sauce() cout n_type.c_str() 制作中,开始调味 make(); noodle-cooki
18、ng(); noodle-sauce(); return noodle;#include #include Waiter.h#include Cook.hint main() Cook cook; Waiter waiter(cook); Noodle *noodle1 = waiter.orderNoodles(牛肉面); if (noodle1) delete noodle1; Noodle *noodle2 = waiter.orderNoodles(羊肉面); if (noodle2) delete noodle2; Noodle *noodle3 = waiter.orderNoodles(臊子面); if (noodle3) delete noodle3; Noodle *noodle4 = waiter.orderNoodles(西红柿鸡蛋面); if (noodle4) delete noodle4;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1