自学考试专题:面向对象程序设计复习资料

上传人:小****库 文档编号:48244022 上传时间:2022-01-01 格式:DOC 页数:22 大小:102.50KB
收藏 版权申诉 举报 下载
自学考试专题:面向对象程序设计复习资料_第1页
第1页 / 共22页
自学考试专题:面向对象程序设计复习资料_第2页
第2页 / 共22页
资源描述:

《自学考试专题:面向对象程序设计复习资料》由会员分享,可在线阅读,更多相关《自学考试专题:面向对象程序设计复习资料(22页珍藏版)》请在装配图网上搜索。

1、面向对象程序设计面向对象程序的基本元素是 对象表达式 long(int var) 也可表示为 (long)int var要让一个类中的所有对象具有共同的数据,应使用 静态数据成员在C+中,头文件扩展名是 h下列数据类型中不属于C+语言的基本数据类型是 枚举类型设已有函数int min(int,int),该min函数功能为返回两个参数中的较小值,若求22,59,70三者中最小值,下列表达式不正确的是 int m=min(22,59,70)对于下面的函数原型声明:void testDefautParam(int a, int b=7, char z=*); 下列函数调用中,不合法的是 testDe

2、fautParam(5,#);已有函数double Fun1(int,int);下列函数中不可以定义为Fun1函数的重载函数的是 int Fun1(int,int)有关析构函数的说法,不正确的是 析构函数和构造函数一样可以有形参类定义的内容允许被其对象无限制地访问的是 public 部分C+语言可用p.a的形式访问派生类对象p的基类成员a,其中a是 公有继承的公有成员对于友元函数,下列描述中正确的 友元不是本类的成员函数关于成员函数的重载,说法正确的是 函数重载,要求函数名相同,但参数个数不同或参数个数相同但其类型不同能实现对对象进行初始化功能的是 构造函数多继承派生类构造函数构造对象时,被最

3、先调用的是 虚基类的构造函数面向对象程序设计有以下主要特点,即抽象、封装、继承和 多态假设int a=l ,b=2;则表达式(+a/b) * b-的值为 2 无论是什么继承方式,派生类的成员不能访问基类 私有 属性的成员。静态成员属于 类 ,非静态成员属于对象。用于输出表达式值的标准输出流对象是 cout在函数模板的参数中,用class修饰的参数称为 模板 参数。函数重载时,编译系统会根据形参的个数或 形参的类型 来区分。编译时的多态性可以通过使用 重载 来实现。设要把一个文件输出流对象thisFile与文件“d:myfilecode.txt”相关联,所用的C+语句是 thisFile.ope

4、n(“d:myfilecode.txt”) 。C+中,已知char*p1=newchar(10);则释放p1指向的内存使用语句是 deletep1 。下列程序实现将用户输入的字符串逆向输出。例如:输入的字符串为ABCDE,则输出为EDCBA。#include using namespace std;void main( )char str180; cinstr; int k=strlen(str);for (int i=0; ik; i+) coutstrk-i-1; 下列程序实现了对复数进行加法运算,请将程序补充完整。#include#includeusing namespace std;C

5、lass 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; return complex(r,i) ;void main( ) complex x(1,2),y(3,4),z; z=x+y;coutz.real“+”z.imag“I”endl;下面函数模板求,其中n为整数。#include using name

6、space std; template ; double power(T x, int n)if(x=0) return 0;if(n=0) return 1;T powerx=1;for (int i=0; iabs(n); i+)powerx=powerx*x;if (n0)return 1.0/powerx;else return powerx; 在下面横线处填上适当内容,完成类B的定义。#include using namespace std;class A public:A( ) a=0;A(int i) a=i;void print( ) couta”,”; private: in

7、t a;class B:public A public:B( int i ) b1=b2=0;B(int i, int j, int k): A(i) b1=j; b2=k; /使a的值为ivoid print( )A:print( ); coutb1”,”b2endl;private: int b1, b2;完成下面类中的成员函数的定义。class triangleprivate:int base,height;/三角形的底和高public:triangle(int base,int height);triangle(triangle &t);triangle:triangle(int a,

8、int b)base=a; height =b;triangle:triangle( triangle &t )base =t. base;height =t. height;以下程序是定义一个累加器类sumA,对其重载运算符“+”,请填空。class sumA private: int n;public:sumA() n=0;sumA(int i) n=i; sumA operator + (sumA a) /运算符重载函数sumA t; t.n=n+a.n; return t; /函数返回void disp() coutn=nendl;void main()sumA k1(7),k2(27

9、),k3;k3=k1+k2;k1.disp(); k2.disp(); k3.disp(); 写出下列程序的运行结果:#include using namespace std;void swap(int x, int y)int t;t=x; x=y; y=t;void main( )int a=80, b=100;cout”a=”a”,b=”bendl;swap(a,b);cout”a=”a”,b=”bendl;答:结果是:a=80,b=100a=80,b=100写出下列程序的运行结果:#include using namespace std;class BASE public:BASE(

10、) cout”BASE”;class DERIVED : public BASE public: DERIVED ( ) cout” DERIVED”;void main( )DERIVED obj;答:结果是:DERIVEDBASE写出下列程序的运行结果:#include using namespace std;class A public:A( ) cout”A”; A( ) cout”-A”; ;class B : public AA* p; public:B( ) cout”B”; p=new A( ); B( ) cout”-B”; delete p; ;void main( )B

11、obj;答:结果是:ABA-B-A-A编写一个函数int StrNum(char *s, char *subs),其功能是:统计子字符串subs在字符串s中出现的次数。答:#include using namespace std;int StrNum(char *s, char *subs) int n=0;int h1,h2;int p1,p2;h1=strlen(s);h2=strlen(subs);p1=0;while (p1h1) p2=0;while (sp1=subsp2&p2h2&p1h1) p1+; p2+;if (p1=h1 & p2h2) break; if (p2=h2)

12、 n+;elsep1=p1-p2+1; return n定义一个Point类,派生出圆Circle类,并增加一函数Area()计算圆的面积。不要求定义测试类。#include using namespace std;class Point public:Point(float ax , float ay)x=ax; y=ay; private:float x;float y;class Circle : public Point public:Circle(float ax, float ay, float ar); float Area( ) return 3.14*r*r; private

13、:float r;Circle:Circle(float ax, float ay, float ar) : Point(ax, ay) r=ar; 下列不属于面向对象程序设计的特征的是 完整性已知:int m=10; 下列表示引用的方法中正确的是 int &x=m;如果要对AB类中的整型静态变量c赋初值0,则书写语句正确的是 static int AB:c=0;设有数组定义:char array=”China”; 则数组array所占的空间是 6个字节可用来替换宏替换“#define E 2.718281828”的语句是 Const Float E 2.718281828;假定要对类AB定义

14、加号操作符重载成员函数,实现两个AB类对象的加法,并返回相加结果,则该成员函数的声明语句为 AB operator+(AB &a)设类ClassA中存在类成员static double x,则下列初始化方式正确的是 double ClassA:x=25在继承中,派生类拥有的基类个数为 至少1个运用运算符delete删除一个动态对象时 系统首先为该动态对象调用析构函数,再释放其占用的内存基类中的protected成员可以通过public派生,其在派生类中的可见性为 protected派生类的对象可以访问的基类成员是 公有继承的基类的公有成员关于友元函数的说法正确的是 使用友元函数的主要目的是提高

15、程序执行效率,因为可直接调用该类私有变量一个类拥有多个构造函数,则这些构造函数间为 重载关系下列关于类的权限的描述,说法错误的是 类本身的成员函数只能访问自身的私有成员使用delete删除对象数组时,描述正确的是 数组中各元素都调用析构函数假设int a=2,b=3;则表达式(+a/b) * b-的值为 3 。面向对象程序设计有以下主要特点,即抽象、 封装 、继承和多态。运行时的多态性主要是通过 虚函数 来实现。在用class定义一个类时,数据成员和成员函数的默认访问权限是私有 。用于从键盘上为变量输入值的标准输入流对象是 cin 定义一个函数模板要用到的第一个修饰符是 template C+

16、中,已知char*p1=newchar10;则释放p1指向的内存使用语句是 delete p1 。静态 成员函数中不能直接引用类中说明的非静态成员。设要把一个文件输出流对象thisFile与文件“d:myfilecode.txt”相关联,所用的C+语句是 thisFile.open(“d:myfilecode.txt”) 。函数重载时,编译系统会根据形参的类型或 形参的个数 来区分。下列程序的功能是:将字符数组s2中的全部字符(含0)复制到字符数组s1中,不用strcpy函数。#include using namespace std;void main( )char s1180, s2180;

17、cins2;for (int i=0; s2i!=/0 ; i+)/非0字符的复制s1i=s2i; s1i=s2i; couts1;下列程序的功能是求两个浮点数之差,在下面横线处填上cha函数的原型声明、调用方法。#include using namespace std;void main( )float a,b; float cha(float,float) a=12.5;b=6.5;float c = cha(a,b) ; coutcendl;float cha(float x,float y)float w;w=x-y;return w;在程序下划线处填上缺少的程序部分,源程序如下:#i

18、nclude using namespace std;template T fun(T x) T y; y=x*x-T(5); return y;void main() float a=2; coutfun(a);在下面横线处填上适当内容,完成类中成员函数的定义。class A int *a;int n;public:A(int nn=0):n(nn)if(n=0) a=0;elsea=new intn; A( )delete a; /定义析构函数,释放动态数组空间;以下程序是定义一个累加器类sumA,对其重载运算符“+”,请填空。class sumA private: int n;publi

19、c:sumA() n=0;sumA(int i) n=i; sumA operator + (sumA a) /运算符重载函数sumA t; t.n=n+a.n; return t; /函数返回void disp() coutn=nendl;void main()sumA k1(7),k2(27),k3;k3=k1+k2;k1.disp(); k2.disp(); k3.disp(); 写出下列程序的运行结果:#include using namespace std;class FunArrayint *pa; / 指向一个数组空间int size; /数组元素个数 public:FunArr

20、y(int a, int thesize):pa(a), size(thesize) int Size( ) return size; int& operator (int index) return paindex-1; ;void main( )int s=1,3,5,7,9;FunArray ma(s, sizeof(s)/sizeof(int);ma3=11;for (int i=1; i=ma.Size( ); i+) coutmai,;答:1,3,11,7,9,写出下列程序的运行结果:#include using namespace std;class A public:A( )

21、cout”A”; ;class B public:B( ) cout”B”; ;class C : public AB b; public:C( ) cout”C”; ;void main( )C obj;答:ABC写出下列程序的运行结果:#include using namespace std;class MyClass public:int number;void set(int i);int number=3;void MyClass:set (int i)number=i;void main( )MyClass my1;int number=10;my1.set(5);coutmy1.

22、numberendl;my1.set(number);coutmy1.numberendl;my1.set(:number);coutmy1.numberendl;答:5103编程实现:输入一个 n*n 的矩阵,求出两条对角线元素值之和。答:#include using namespace std;int main( )int n =0; int *array; int sum = 0; coutinput num:n; array = new int*n; for(int k =0; kn; k+) arrayk = new intn; for(int i = 0; in;i+) for(i

23、nt j = 0; jarrayij; for(i = 0; in; i+) sum+=arrayii+ arrayin-i-1; coutsumendl;return 0; 定义一个Point类,派生出矩形Rectangle类,并增加一函数Area()计算矩形的面积。不要求定义测试类。答: #include using namespace std;class Point public:Point(float ax , float ay)x=ax; y=ay; private:float x;float y;class Rectangle : public Point public:Recta

24、ngle (float ax, float ay, float w, float h); float Area( ) return width*high; private:float width;float high;Rectangle: Rectangle (float ax, float ay, float w, float h) : Point(ax, ay) width=w;high=h; 在C+中,函数原型不能标识 函数的功能在C+程序中,对象之间的相互通信通过 调用成员函数实现对于任意一个类,析构函数的个数最多为 1假定一个二维数组的定义语句为“int a34=3,4,2,8,6;

25、”,则元素a12的值为 6 友元关系不能 继承 对重载函数形参的描述中,错误的是 参数的个数、类型、顺序都相同,只是函数的返回值类型不同下面说法正确的是 内联函数在编译时是将该函数的目标代码插入每个调用该函数的地方可以用p.a的形式访问派生类对象p的基类成员a,其中a是 公有继承的公有成员在公有派生情况下,有关派生类对象和基类对象的关系,不正确的叙述是 派生类的对象可以赋给基类的对象在每个C+程序中都必须包含有这样一个函数,该函数的函数名为 main设x和y均为bool量,则x&y为真的条件是 它们均为真下面的哪个保留字不能作为函数的返回类型 new假定a为一个整型数组名,则元素a4的字节地址

26、为 a+16假定AB为一个类,则执行“ABa(4),b3,*p2;”语句时,自动调用该类构造函数的次数为 4 假定要对类AB定义加号操作符重载成员函数,实现两个AB类对象的加法,并返回相加结果,则该成员函数的声明语句为 ABoperator+(AB&a) 循环语句whlie(int i=0 )i-;的循环次数是 0 如果有int x,*p; float y,*q;则下面操作正确的是 p=&x D 已知:print( )函数是一个类的常成员函数,它无返回值,下列表示中,正确的是 void print( ) const 下列表示引用的方法中,正确的是已知:int a=1000; int &x=a

27、下列的各类函数中,友元函数不是类的成员函数 定义类的动态对象数组时,系统只能够自动调用该类的_无参_构造函数对其进行初始化。无论是什么继承方式,派生类的成员不能访问基类_ private _属性的成员。表达式coutend1还可表示为_ Cout”/n” _。基类的公有成员在派生类中的访问权限由_访问控制_决定。C+支持的两种多态性分别是_编译时的_多态性和_运行运行时的多态性。C+中语句const char * const p=hello;所定义的指针p和它所指的内容都不能被 _改变_。假定AB为一个类,则语句AB(AB&x);为该类复制初始化函数的原型说明。说明常成员函数时,关键字cons

28、t写在成员函数的_函数头_和_成员访问运算符_函数体_之间。在C+中,访问一个对象的成员所用的运算符是_成员选择运算符_,访问一个指针所指向的对象的成员所用的运算符是_成员访问运算符_。派生类从一个或多个以前定义的该类的_基类_继承数据和函数。 在下面横线处填上适当字句,完成类中成员函数的定义。class A int * a; public: A(int aa=0) a= a=new int(aa) ; A( ) delete a ; 下面是一个函数模板,用于计算两个向量的和。在下面横线处填上适当字句,完成函数模板定义。include templateT* f(T* a,T* b,int n)

29、 T* c= newTn _; for(int i=0;in;i+) ci= _ ai+bi _; return c;void main() int a5=1,2,3,4,5,b5=10,20,30,40,*p; p=f(a,b,5); for(int i=0;i5;i+) coutpiendl;下面是类fraction(分数)的定义,其中重载的运算符以分数形式输出结果,例如将三分之二输出为2/3。在横线处填上适当字句。class fraction int den; /分子 int num; /分母 friend ostream& operator(ostream&,fraction); ;o

30、stream& operator (ostream& os,fraction fr) _ Coutden”/”numend1 _; return _ _ os _; float a=2; coutfun(a);下面是一个用户口令检查程序,在横线处填上适当语句完成程序功能。include include _ Char*PASS=”wolleh” ;/定义由PASS指针所指向的口令wolleh。void main() char user10;/用于存放输入的口令 coutplease input your password:user _/输入口令 if(strcmp(user,PASS)=0) c

31、outyour password is correctendl; else coutyour password is errorendl;在下面程序横线处填上适当的字句,使其输出结果为0,56,56。include class base public: _ int _func( )return 0;class derived:public base public: int a,b,c; _ void _ _ setValue(int x,int y,int z)a=x;b=y;c=z; int func( )return(a+b)*c;void main() base b; derived d

32、; coutb.func( ),; d.setValue(3,5,7); coutd.func( ),; base& pb=d; coutpb.func( )end1;给出下面程序的输出结果。 #includeusing namespace std;void fun(int &a, int &b) int p; p=a; a=b; b=p;void exchange(int &a, int &b, int &c) if( ab ) fun(a, b); if( ac ) fun(a, c); if( bc ) fun(b, c);int main() int a=12,b=89,c=56; e

33、xchange(a, b, c); couta=a,b=b,c=cendl; return 0;答:结果是A=89 b=56 c=12请写出下面程序段的输出结果。#include using namespace std;class A public: A( ) cout A; ;class B public:B( ) cout B; ;class C: public A public: C( ) cout C; private: B b;int main ( ) C obj; return 0; 答:结果是 ABC从键盘上输入数组s123 的各元素,并将数组s1转置后存入数组s2中,最后输出数

34、组s1和数组s2的各元素。答:源程序如下:#include void main() int s123,s232,i,j; for(i=0;i2;i+) for(j=0;j3;j+) couts1ijs1ij;s2ji=s1ij; coutArray s1:endl; for(i=0;i2;i+) for(j=0;j3;j+)couts1ijt;coutendl; coutArray s2:endl; for(i=0;i3;i+) for(j=0;j2;j+)couts2ijt;coutendl; 测试一个名为rectangle的矩形类,其属性为矩形的左下角与右上角两个点的坐标,能计算矩形的面积

35、。答:源程序如下:#include class car;class boat private:int weight; public:boat(int w):weight(w) friend int totalweight(boat b1,car c1); ;class car private:int weight; public:car(int w):weight(w);friend int totalweight(boat b1,car c1);int totalweight(boat b1,car c1) return b1.weight+c1.weight;void main()car

36、c1(1000);boat b1(2000);couttotalweight(b1,c1)str; 执行时,从键盘输入: Microsoft 考虑下面的函数原型声明:void testDefaulParam(int a,int b=7,char z=*);下面函数调用中,不合法的是 testDefaulParam(5,#); 下列语句中,将函数int sum(int x, int y)正确重载的是 float sum(float x, float y); 下列表示引用的方法中,正确的是:已知:int a=1000; int &x=a;在一个函数中,要求通过函数来实现一种不太复杂的功能,并且要求

37、加快执行速度,选用 内联函数下列有关C+类的说法中,不正确的是 在类中,如果不做特别说明,所有成员的访问权限均为公用的已知X类,则当程序执行到语句:X array3;时,调用了3次构造函数。下面说法中,正确的是 一个类只能定义一个析构函数,但可以定义多个构造函数已知:print( )函数是一个类的常成员函数,它无返回值,下列表示中,正确的是 void print( ) const;下面描述中,表达错误的是 公用继承时基类中的private成员在派生类中仍是private的设置虚基类的目的是 消除二义性 下面 基类的对象可以赋值给派生类的对象的叙述不符合赋值兼容规则关于虚函数的描述中,正确的是

38、基类中说明了虚函数后,派生类中与其对应的函数可不必说明为虚函数下面关于友元的描述中,错误的是 类与类之间的友元关系可以继承下列关于静态数据成员的说法,不正确的是 静态数据成员不是所有对象所共用的如果表达式+i*k中的“+”和“*”都是重载的友元运算符,若采用运算符函数调用格式,则表达式还可以表示为 operator*(operator+(i),k)下面对模板的声明,正确的是 template下列的各类函数中,(友元函数 )不是类的成员函数在类中必须声明成员函数的 原理 ,成员函数的 实现 部分可以写在类外。如果需要在被调函数运行期间,改变主调函数中实参变量的值,则函数的形参应该是 引用 类型或

39、 指针类型。 抽象 类只能作为基类使用,而不能声明它的对象。进行函数重载时,被重载的同名函数如果都没有用const修饰,则它们的形参个数或 类型 必须不同。通过一个 常 对象只能调用它的常成员函数,不能调用其他成员函数。函数的递归调用是指函数直接或间接地调用 自身 。拷贝构造函数的形参必须是 本类对象的引用 。在字长为32位的机器中,sizeof(char) 1 字节,sizeof(unsigned int) 4 字节C+语法规定,任何变量在使用前必须先 定义 ;变量有两个值,一个是变量本身的值,另一个是变量的 地址值 。静态数据成员是类的所有对象中 共享 的成员,静态数据成员初始化与一般数据

40、成员初始化 不同 。请补充完成下面下划线的程序部分。#include using namespace std;class Apublic:void f()coutCall As function f()endl;class Bpublic:void f() coutCall Bs function f()endl;void g() coutCall Bs function g()endl; ;class C: Public Apublic:void g()coutCall Cs function g()endl;int main()C cc;cc.B:f(); cc.B:g();cc.g();

41、public B;阅读下列程序,请完成划线部分语句。#include void main() int a = 50 , b(0) ; b=+a; couta,bendl; b=a+;couta,bendl;下面是一个用户口令检查程序,在横线处填上适当语句完成程序功能。include include _ Char*PASS=”wolleh” ;/定义由PASS指针所指向的口令wolleh。void main() char user10;/用于存放输入的口令 coutplease input your password:user _/输入口令 if(strcmp(user,PASS)=0) cou

42、tyour password is correctendl; else coutyour password is errorendl;以下程序输出结果为3和4,请填上划线上的语句。#include void main() Char flag=c ; switch(flag)case a :cout1endl ;case b :cout2endl ; break;case c : cout 3endl ; default : cout 4endl ; break; 阅读下列程序,请将程序补充完整。#include class Apublic:A();A(int i,int j);A()coutD

43、onstructor.n;void print();Private:int a,b;A:A()a=b=10;coutDefault constructor.n;A:A(int i,int j)a=i b=j; coutConstructor.n;void A:print()couta=a,b=bendl;void main()A m,n(15,18);m.print();n.print();阅读下列程序写出它的输出结果。#include#includevoidmain()char*a5=student,worker,cadre,soldier,peasant;char*p1,*p2;p1=p2

44、=a0;for(inti=0;i0)p1=ai;if(strcmp(ai,p2)0)p2=ai;coutp1p2endl;答:输出结果是:worker:cardre请写出下面程序段的输出结果?#includeinta=5;voidmain()inta=10,b=20;coutabendl;inta=0,b=0;for(inti=1;i6;i+)a+=i;b+=a;coutab:aendl;coutabendl;答:输出结果是:10 20 15 35 5 10 20把从键盘上输入的一批整数(以-1作为终止输入的标志)保存到文本文件“a:xxk1.dat”中。源程序如下:#include #inc

45、lude#includevoidmain() ofstreamfout(a:xxk1.dat); if(!fout) cerr文件没有打开!x;while(x!=-1)foutxx;fout.close();测试一个名为rectangle的矩形类,其属性为矩形的左下角与右上角两个点的坐标,能计算矩形的面积。答:源程序如下:#include class car; class boat private:int weight; public:boat(int w):weight(w) friend int totalweight(boat b1,car c1); ;class car private:int weight; public:car(int w):weight(w);friend int totalweight(boat b1,car c1);int totalweight(boat b1,car c1) return b1.weight+c1.weight;void main()car c1(1000);boat b1(2000);couttotalweight(b1,c1)endl;

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!