oop技术:面向对象技术复习思考题.doc
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
17.友元函数也是类的一种成员函数。
18.友元函数更好地实现了类的数据隐藏性。
19.一个类的构造函数和析构函数都可以重载。
20.静态成员函数仅能访问静态的数据成员。
21.静态数据成员的初始化必须在在构造函数内。
22.无论何时编译器都为类构造一个无参数的缺省的构造函数。
23.无论什么方式的继承,基类的私有成员都不能被派生类访问。
29.使用关键字class定义的类中缺省的访问权限是私W (private)的。
30.说明或定义对象时,类名前不需加class关键字。
31.可以在类的构造函数中对静态数据成员进行初始化。
32.protected和private区别在于:protected成员可以被派生类访问,而private成员则不能 被派生类访问。
它们定义类的区别在于I。
17.静态的成员函数没有隐含的I,所以,它们只能访问静态的数据成
员。
18.与,,(!a==0)H等价的C++表达式是I。
19.若a=6,b=4, c=2,则表达式”!(a-b)+c-l&&b+c/2”的值是I。
20.在面向对象的程序设计中,通过I实现数据隐藏;通过
I实现代码的复用。
7.编写夏数类Complexo实现各种常用构造函数,实现其数之间的加、减、乘、赋值运算,以及= =、!=等逻辑运算。
8.定义一个字符栈类Stack(包括类的实现)。数据成员包括一个存放字符的数组stc虹]和 一个栈指针tos。栈数组的尺寸由常量SIZE确定。栈的基本操作为Push ()和Pop ()o
(
cout« "you chose b" « endl;
continue;〃返回主菜单
I
else
cout« "you didn't choose c or d!H« endl; continue; //返回主菜单
}
cout « "you must type 1 or r or q!H« endl;
}
char *y=x;
while(*y++){);
return y-x-1;
}
3.#include <stdio.h>
void main()
(
int a[10]={ 1,2,3,4,5,6,7,8,9,10},*p=a;
printf(”%d”,*(p+2));
)
4.#include<stdio.h>
void main()
(9802,nLongH,21},
{9803,"Xue",19}};
fun(students+2);
}
10.#include "iostream.h"
#define PR(a) cout«a
#define PRINT 1 (a) PR(a);cout«endl
#define PRINT2(a,b) PR(a);PRINTl(b) void main()
continue; //返回主菜单
}
I
if (c == F)
(
cout« "RIGHT MENU:" « endl;
cout« "select a or b:
cin » c;
if (c == 'a')
(
cout« "you chose 'a'" « end!;
continue; //返回主菜单
}
if (c == b)
cout« "quitting menu..." « endl;
}
2.编写一个函数,统计出具有n个元素的一维数组中大于等于所有元素平均值的元素个数 并返回它。
3.有4个学生,每个学生包括学号,姓名,成绩。要求找出成绩最高者的姓名和成绩。
4.利用静态数据成员的概念,编写一个类,可以统计目前存在多少个该类的对象。
21.在类的定义中,说明为protected的数据成员称为保护成员。保护数据成员具
有双重作用:对于其派生类而言,I;而对于其外部的程序而言,
22.C++中有两种数据类型:I和I可以使用signed修饰符。
23.举出C++中两种流程控制语句、I°
24.C++中,对象保存在内存中,I内存是自动分配和释放的,而
int x, y, *p;
p=&a[0];
x=*(p+2);
y=*(p+4);
printf("*p=%d,x=%d,y=%d\n",*p,x,y);
return;
}
7.#include<iostream.h>
void ast(int x,int y,int *cp,int *dp)
(
*dp=x%y;
return 0;
)
9.#include <iostream.h>
struct stu
( int num;
char name[101;
int age;
};
void fun(stu *p)
( cout«( *p). name«end 1; }
main()
( stu students[3]=((9801,"Zhang",20),
造函数,否则应用程序会产生一个编译错误。
5.静态数据成员在类外进行初始化,且静态数据成员的一个拷贝被类的所有对象
6.设"inta=3,b=4,c=5;”,表达式”(a+b) >c&&b! =c”的值是I°
7.在C++中,定义重载函数时,应至少使重载函数的参数个数或参数类型
8.动态联编要满足两个条件,它们是I、Io
#define TEST
void main()
{
int x=0;
int y=l;
int z=l;
#ifdefTEST
cout«x«y;
#endif
cout«z;
}
%1.问答题
1.面向对象程序设计的基木思想是什么?
2.什么是对象、消息和类?
3.简述面向对象程序设计的主要特征。
4.下列运算符各能代表几种意义:*。
cin » c;
if(c == 'c')
(
cout« "you chose 'c'" « endl;
continue; //返回主菜单
}
if(c == d)
(
cout« "you chose'd'" « endl;
continue; //返回主菜单
}
else
(
cout« "you didn't choose c or d!"« endl;
33.cout通常与显示器相连,cin通常与键盘相连。
34.setw (n)只对下一个输出有效。
35.hex、oct、dec只对下一个输出有效。
%1.程序设计题(10个)
1.把下面程序中的if语句换成switch语句。
#include <iostream.h>
void main()
(
char c;
while(true)
24.基类中定义了虚函数,在派生类中相应函数会自动变成虚函数。
25.要达到动态联编的效果,基类和派生类的对应函数不仅名字相同,而且返回类型、参数 个数和类型也必须相同。
26.如果派生类没有实现虚函数,那么它将使用他的基类的虚函数。
27.我们不能用抽象类定义对象,但可以定义对象的指针。
28.构造函数和析构函数可以是虚函数。
(
int *v,b;
v=&b; b=100; *v+=b;
printf("%d\nH,b);
}
5.void fun(int *x)
( printf(”%d\n”,++*x); }
main()
(
int a=25;
fun(&a);
}
6.#include <stdio.h>
void main()
{
inta[ ]=( 1,2,3,4,5};
11.在定义拷贝构造函数时,为什么通常还要定义一个重载的赋值运算符?
12.拷贝构造函数在哪几种情况下调用?
%1.判断题
1.C++语言程序中,要调用的函数必须在main。函数中定义。
2.C++语言程序中,main。函数必须放在程序开始的部分。
3.C++语言程序中,return语句必须放在函数的最后。
4.C++程序中有调用关系的所有函数必须放在同一源程序文件中。
对象程序设计的I特性。
13.在C++中,构造派生类对象时,总是先从I的初始化开始的。
14.类是用户定义的类型,具有类类型的变量称作Io
15.在5个运算符”*(乘号)、&&、v=、!、!= ”中,优先级由高到低的顺序是
16.在C++中,类定义一般用class关键字,不过用struct关键字也可以定义类,
内存需要用户I I己申请和释放。
25.在C++函数中,可用return语句带回一个值。如果有多个返回值,可用
%1.写出程序的运行结果
1.#include <iostream.h>
void main()
(
int a;
char ch;
ch=a*;
ch++;
a=ch;
coutvvavv',';
)
2.下面函数的功能是:()int fun(char *x)
5.运算符/的运算对象必须是整型。
6.字符数组中的字符串可以进行整体输入输出。
7.可以在赋值语句中通过赋值运算符”=”对字符数组整体赋值。
8.数组名作为函数调用时的实参,则实际上传递给形参的是数组的第一个元素值。
9.当说明一个结构变量时,系统分配给它的内存是各成员所需内存量的总和。
10.用typedef可以定义作种类型名,但不能用来定义变量。
9.在C++类中,有一种不能定义对象的类,这样的类只能被继承,称之为
I,定义该类至少具有一个I0
10.举出C++中两神用户日定义的数据类型:I、I。
11.C++中没有字符串类型,字符串是通过I来表示的,每一个字符串
都有一个结尾字符I。
12.在C++中,虽然友元提供了类之间数据进行访问的一种方式,但它破坏了面向
5.简述三种预编译指令的功能和格式
6.对象之间的相互作用和通信是通过消息。消息的组成部分有哪些?
7.如何测试你机器的int, float, double, long, char各类型变量存储的字节数。
8.do-while语句与while语句的主要区别是什么?
9.break语句实现的功能。
10.链表是怎样的一种数据结构,它与数组有什么不同?链表的插入和删除是怎样实现的?
int k;
for(k=0;k<=l 00;k+=50)
PRINT2(k,k+12.4);
11.#include<iostream.h>
#define CIR(r) r*r
void main()
(
int x=l;
int y=2;
int z;
z=CIR(x+y);
cout«z«endl;
}
12.#include <iostream.h>
void main()
(
int a,b,c,d;
a=2;b=3;
ast(a,b,&c,&d);
coutvvc vvdvvendl;
}
8.#include <stdio.h>
struct cmplx
(
int x;
int y;
}cnum[2]={ 1,3,2,7};
int main()
(
printf("%d\n",cnum[O].y*cnum[ I ].x);
OOP
%1.填空题
1.在C++中,函数的参数有两种传逆方式,它们是值传逆和I。当一个成
员函数被调用时,该成员函数的I指向调用它的对象。
2.拷贝构造函数使用I作为参数初始化创建中的对象。
3.在公有继承的情况下,基类数据成员在派生类中的访问权限Io
4.用new申请某一个类的动态对象数组时,在该类中必须能够匹配到I构
11.用typedef可以增加新类型。
12.宏替换不占用运行时间。
13.在include命令行中,用双引号和用尖括号将被包含的文件名括起来没有区别。
14.C++编译ຫໍສະໝຸດ Baidu的编译预处理可以看作一行C++语句。
15.头文件必须由系统提供。
16.创建派生类对象时,先调用基类的构造函数,再调用派生类的构造函数,当销毁这个对 象时顺序正好相反,先调用派生类的析构函数,再调用基类的析构函数。
5.编写几何点(二维平面上)的类Point,包括位置属性(二维坐标x, y),成员函数包括 点的位置获取函数GetX ()和GetY (),点的位置设置函数SetX ()和SetY (),和点的 位置移动函数MoveTo ()以及点的信息打印函数Display()。
6.编写几何图形圆的类Circle,包括两个属性:圆心0(用上题中的Point类实现)和半径Ro成员函数包括:圆心位置获取函数GetO ()和半径获取函数GetR();圆的位置移动函 数MoveTo();圆的半径设置函数SetR();以及圆的信息打印函数Display ()o
cout« "MAIN MENU:” « endl;
cout« "1: left, r: right, q: quit ->
cin » c;
if(c == 'q')
break; // while结束
if (c == T)
(
cout« "LEFT MENU:" « endl;
cout« "select c or d:
18.友元函数更好地实现了类的数据隐藏性。
19.一个类的构造函数和析构函数都可以重载。
20.静态成员函数仅能访问静态的数据成员。
21.静态数据成员的初始化必须在在构造函数内。
22.无论何时编译器都为类构造一个无参数的缺省的构造函数。
23.无论什么方式的继承,基类的私有成员都不能被派生类访问。
29.使用关键字class定义的类中缺省的访问权限是私W (private)的。
30.说明或定义对象时,类名前不需加class关键字。
31.可以在类的构造函数中对静态数据成员进行初始化。
32.protected和private区别在于:protected成员可以被派生类访问,而private成员则不能 被派生类访问。
它们定义类的区别在于I。
17.静态的成员函数没有隐含的I,所以,它们只能访问静态的数据成
员。
18.与,,(!a==0)H等价的C++表达式是I。
19.若a=6,b=4, c=2,则表达式”!(a-b)+c-l&&b+c/2”的值是I。
20.在面向对象的程序设计中,通过I实现数据隐藏;通过
I实现代码的复用。
7.编写夏数类Complexo实现各种常用构造函数,实现其数之间的加、减、乘、赋值运算,以及= =、!=等逻辑运算。
8.定义一个字符栈类Stack(包括类的实现)。数据成员包括一个存放字符的数组stc虹]和 一个栈指针tos。栈数组的尺寸由常量SIZE确定。栈的基本操作为Push ()和Pop ()o
(
cout« "you chose b" « endl;
continue;〃返回主菜单
I
else
cout« "you didn't choose c or d!H« endl; continue; //返回主菜单
}
cout « "you must type 1 or r or q!H« endl;
}
char *y=x;
while(*y++){);
return y-x-1;
}
3.#include <stdio.h>
void main()
(
int a[10]={ 1,2,3,4,5,6,7,8,9,10},*p=a;
printf(”%d”,*(p+2));
)
4.#include<stdio.h>
void main()
(9802,nLongH,21},
{9803,"Xue",19}};
fun(students+2);
}
10.#include "iostream.h"
#define PR(a) cout«a
#define PRINT 1 (a) PR(a);cout«endl
#define PRINT2(a,b) PR(a);PRINTl(b) void main()
continue; //返回主菜单
}
I
if (c == F)
(
cout« "RIGHT MENU:" « endl;
cout« "select a or b:
cin » c;
if (c == 'a')
(
cout« "you chose 'a'" « end!;
continue; //返回主菜单
}
if (c == b)
cout« "quitting menu..." « endl;
}
2.编写一个函数,统计出具有n个元素的一维数组中大于等于所有元素平均值的元素个数 并返回它。
3.有4个学生,每个学生包括学号,姓名,成绩。要求找出成绩最高者的姓名和成绩。
4.利用静态数据成员的概念,编写一个类,可以统计目前存在多少个该类的对象。
21.在类的定义中,说明为protected的数据成员称为保护成员。保护数据成员具
有双重作用:对于其派生类而言,I;而对于其外部的程序而言,
22.C++中有两种数据类型:I和I可以使用signed修饰符。
23.举出C++中两种流程控制语句、I°
24.C++中,对象保存在内存中,I内存是自动分配和释放的,而
int x, y, *p;
p=&a[0];
x=*(p+2);
y=*(p+4);
printf("*p=%d,x=%d,y=%d\n",*p,x,y);
return;
}
7.#include<iostream.h>
void ast(int x,int y,int *cp,int *dp)
(
*dp=x%y;
return 0;
)
9.#include <iostream.h>
struct stu
( int num;
char name[101;
int age;
};
void fun(stu *p)
( cout«( *p). name«end 1; }
main()
( stu students[3]=((9801,"Zhang",20),
造函数,否则应用程序会产生一个编译错误。
5.静态数据成员在类外进行初始化,且静态数据成员的一个拷贝被类的所有对象
6.设"inta=3,b=4,c=5;”,表达式”(a+b) >c&&b! =c”的值是I°
7.在C++中,定义重载函数时,应至少使重载函数的参数个数或参数类型
8.动态联编要满足两个条件,它们是I、Io
#define TEST
void main()
{
int x=0;
int y=l;
int z=l;
#ifdefTEST
cout«x«y;
#endif
cout«z;
}
%1.问答题
1.面向对象程序设计的基木思想是什么?
2.什么是对象、消息和类?
3.简述面向对象程序设计的主要特征。
4.下列运算符各能代表几种意义:*。
cin » c;
if(c == 'c')
(
cout« "you chose 'c'" « endl;
continue; //返回主菜单
}
if(c == d)
(
cout« "you chose'd'" « endl;
continue; //返回主菜单
}
else
(
cout« "you didn't choose c or d!"« endl;
33.cout通常与显示器相连,cin通常与键盘相连。
34.setw (n)只对下一个输出有效。
35.hex、oct、dec只对下一个输出有效。
%1.程序设计题(10个)
1.把下面程序中的if语句换成switch语句。
#include <iostream.h>
void main()
(
char c;
while(true)
24.基类中定义了虚函数,在派生类中相应函数会自动变成虚函数。
25.要达到动态联编的效果,基类和派生类的对应函数不仅名字相同,而且返回类型、参数 个数和类型也必须相同。
26.如果派生类没有实现虚函数,那么它将使用他的基类的虚函数。
27.我们不能用抽象类定义对象,但可以定义对象的指针。
28.构造函数和析构函数可以是虚函数。
(
int *v,b;
v=&b; b=100; *v+=b;
printf("%d\nH,b);
}
5.void fun(int *x)
( printf(”%d\n”,++*x); }
main()
(
int a=25;
fun(&a);
}
6.#include <stdio.h>
void main()
{
inta[ ]=( 1,2,3,4,5};
11.在定义拷贝构造函数时,为什么通常还要定义一个重载的赋值运算符?
12.拷贝构造函数在哪几种情况下调用?
%1.判断题
1.C++语言程序中,要调用的函数必须在main。函数中定义。
2.C++语言程序中,main。函数必须放在程序开始的部分。
3.C++语言程序中,return语句必须放在函数的最后。
4.C++程序中有调用关系的所有函数必须放在同一源程序文件中。
对象程序设计的I特性。
13.在C++中,构造派生类对象时,总是先从I的初始化开始的。
14.类是用户定义的类型,具有类类型的变量称作Io
15.在5个运算符”*(乘号)、&&、v=、!、!= ”中,优先级由高到低的顺序是
16.在C++中,类定义一般用class关键字,不过用struct关键字也可以定义类,
内存需要用户I I己申请和释放。
25.在C++函数中,可用return语句带回一个值。如果有多个返回值,可用
%1.写出程序的运行结果
1.#include <iostream.h>
void main()
(
int a;
char ch;
ch=a*;
ch++;
a=ch;
coutvvavv',';
)
2.下面函数的功能是:()int fun(char *x)
5.运算符/的运算对象必须是整型。
6.字符数组中的字符串可以进行整体输入输出。
7.可以在赋值语句中通过赋值运算符”=”对字符数组整体赋值。
8.数组名作为函数调用时的实参,则实际上传递给形参的是数组的第一个元素值。
9.当说明一个结构变量时,系统分配给它的内存是各成员所需内存量的总和。
10.用typedef可以定义作种类型名,但不能用来定义变量。
9.在C++类中,有一种不能定义对象的类,这样的类只能被继承,称之为
I,定义该类至少具有一个I0
10.举出C++中两神用户日定义的数据类型:I、I。
11.C++中没有字符串类型,字符串是通过I来表示的,每一个字符串
都有一个结尾字符I。
12.在C++中,虽然友元提供了类之间数据进行访问的一种方式,但它破坏了面向
5.简述三种预编译指令的功能和格式
6.对象之间的相互作用和通信是通过消息。消息的组成部分有哪些?
7.如何测试你机器的int, float, double, long, char各类型变量存储的字节数。
8.do-while语句与while语句的主要区别是什么?
9.break语句实现的功能。
10.链表是怎样的一种数据结构,它与数组有什么不同?链表的插入和删除是怎样实现的?
int k;
for(k=0;k<=l 00;k+=50)
PRINT2(k,k+12.4);
11.#include<iostream.h>
#define CIR(r) r*r
void main()
(
int x=l;
int y=2;
int z;
z=CIR(x+y);
cout«z«endl;
}
12.#include <iostream.h>
void main()
(
int a,b,c,d;
a=2;b=3;
ast(a,b,&c,&d);
coutvvc vvdvvendl;
}
8.#include <stdio.h>
struct cmplx
(
int x;
int y;
}cnum[2]={ 1,3,2,7};
int main()
(
printf("%d\n",cnum[O].y*cnum[ I ].x);
OOP
%1.填空题
1.在C++中,函数的参数有两种传逆方式,它们是值传逆和I。当一个成
员函数被调用时,该成员函数的I指向调用它的对象。
2.拷贝构造函数使用I作为参数初始化创建中的对象。
3.在公有继承的情况下,基类数据成员在派生类中的访问权限Io
4.用new申请某一个类的动态对象数组时,在该类中必须能够匹配到I构
11.用typedef可以增加新类型。
12.宏替换不占用运行时间。
13.在include命令行中,用双引号和用尖括号将被包含的文件名括起来没有区别。
14.C++编译ຫໍສະໝຸດ Baidu的编译预处理可以看作一行C++语句。
15.头文件必须由系统提供。
16.创建派生类对象时,先调用基类的构造函数,再调用派生类的构造函数,当销毁这个对 象时顺序正好相反,先调用派生类的析构函数,再调用基类的析构函数。
5.编写几何点(二维平面上)的类Point,包括位置属性(二维坐标x, y),成员函数包括 点的位置获取函数GetX ()和GetY (),点的位置设置函数SetX ()和SetY (),和点的 位置移动函数MoveTo ()以及点的信息打印函数Display()。
6.编写几何图形圆的类Circle,包括两个属性:圆心0(用上题中的Point类实现)和半径Ro成员函数包括:圆心位置获取函数GetO ()和半径获取函数GetR();圆的位置移动函 数MoveTo();圆的半径设置函数SetR();以及圆的信息打印函数Display ()o
cout« "MAIN MENU:” « endl;
cout« "1: left, r: right, q: quit ->
cin » c;
if(c == 'q')
break; // while结束
if (c == T)
(
cout« "LEFT MENU:" « endl;
cout« "select c or d: