C++程序-类的封装
- 格式:doc
- 大小:159.50 KB
- 文档页数:8
《C++程序设计》第一套作业及其答案说明:本套作业涵盖第1章——第4章所学的内容。
本套作业共有38道单选题,1道多选题,共41个答案,满分为100分,错一个答案扣除2.5分。
1、在一个C++程序中,main函数的位置(C)。
(A)必须在程序的开头(B)必须在程序的后面(C)可以在程序的任何地方(D)必须在其它函数中间2、C++程序中的语句必须以(B)结束。
(A)冒号(B)分号(C)空格(D)花括号3、在下列八进制整型常量的表示中,(B)是正确的。
(A)0a0 (B)015 (C)080 (D)0x104、在下列十六进制整型常量的表示中,(C)是错误的。
(A)0x11 (B)0xaf (C)0xg (D)0x1f5、下列正确的字符常量为(D)。
(A)“a”(B)“\0”(C)a (D)‘\101’6、在下列运算符中,(D)优先级最低。
(A)!(B)&& (C)!= (D)?:7、设i=1, j=2,则表达式i+++j的值为(C)。
(A)1 (B)2 (C)3 (D)48、已知i=0, j=1, k=2,则逻辑表达式++i || --j && ++k的值为(B)。
(A)0 (B)1 (C)2 (D)39、设a=1, b=2, c=3, d=4,则条件表达式a<b ? a : c<d ? c : d的值为(A)。
(A)1 (B)2 (C)3 (D)410、逗号表达式(x = 4 * 5, x * 5), x + 25的值为(D)。
(A)25 (B)20 (C)100 (D)4511、已知int i, x, y; 在下列选项中错误的是(C)。
(A)if(x && y) i++; (B)if(x = y) i--;(C)if(xy) i--; (D)if(x + y) i++;-1 x<012、设有函数关系为 y = 0 x=0 ,下面选项中能正确表示上述关系为(C)。
《C++程序设计》习题解答第1章C++概述1.填空题(1)在面向对象程序设计中,对象是由___________、___________和___________封装在一起构成的实体。
(2)在面向对象程序设计中,类是具有________________和___________的对象的集合,它是对一类对象的抽象描述。
(3)面向对象程序设计最突出的特点就是___________、___________和___________。
(4)C++语言包含头文件的格式有两种,即_______________和__________________。
(5)C++源程序要经过________、_________、________和_________四个环节,才能在屏幕上显示结果。
(6)每个C++程序都从________函数开始执行。
(7)每个函数体都以________开始,以________结束。
(8)C++程序中的每条语句以________结束。
(9)C++程序的头文件和源程序的扩展名分别为__________和_________,目标程序的扩展名为__________,可执行程序的扩展名为__________。
(10)在C++程序中使用基本输入/输出语句需包含的头文件是________________,应放在程序的________________。
(11)在C++程序中注释语句有_______________和______________两种格式。
(12)C++程序的续行符为_________。
(13)如果从键盘输入语句给变量X,则输入函数的形式为_____________;如果再将变量X的值显示在屏幕上,其输出函数的形式为_____________。
(14)C++程序中的“endl”在输出语句中起___________作用。
参考答案:(1)对象名,一组属性数据,一组操作(2)相同属性数据,操作(3)封装性,继承性,多态性(4)#include<文件名.扩展名>,#include"文件名.扩展名"(5)编辑,编译,连接,运行(6)主函数(7){、}(8)分号;(9).h,.cpp,.obj,.exe(10)#include<iostream.h>,开始部分(11)/* */,//(12)\(13)cin>>X、cout<<X(14)换行并清空流2.选择题(1)面向对象程序设计把数据和()封装在一起。
C语言代码复用与类库封装方法代码复用和类库封装是软件开发中非常重要的概念,在C语言中,我们可以采用一些方法来实现代码的复用和类库的封装,提高开发的效率和代码的可维护性。
本文将介绍一些常用的C语言代码复用和类库封装的方法。
一、宏定义和预处理宏定义是C语言中常用的一种代码复用的方法。
通过使用宏定义,我们可以将一段常用的代码片段封装成一个宏,然后在代码中多次调用该宏,从而达到代码复用的目的。
例如,我们可以定义一个用于计算两个数的最大值的宏:```c#define MAX(a, b) ((a) > (b) ? (a) : (b))```然后在代码中可以多次调用该宏:```cint max = MAX(3, 5);```二、函数封装和模块化设计函数封装是C语言中常用的一种代码复用的方法。
通过将一段特定功能的代码封装成一个函数,我们可以在不同的地方调用该函数,实现代码的复用。
同时,模块化设计也是一个很重要的概念。
我们可以将一段功能相关的函数封装成一个模块,提供给其他程序使用。
例如,我们可以封装一个用于计算斐波那契数列的函数:```cint Fibonacci(int n){if (n <= 0)return 0;else if (n == 1)return 1;elsereturn Fibonacci(n - 1) + Fibonacci(n - 2);}```然后可以在需要计算斐波那契数列的地方调用该函数:```cint result = Fibonacci(5);```三、类库封装和面向对象编程思想类库封装是C语言中实现面向对象编程思想的一种方法。
通过将相关的数据结构和函数封装成一个类,我们可以实现面向对象的代码复用和封装。
在C语言中,我们可以使用结构体来实现类的概念,使用函数指针来实现类的方法。
例如,我们可以封装一个用于处理链表的类库:```ctypedef struct Node {int data;struct Node* next;} Node;typedef struct LinkedList {Node* head;void (*add)(struct LinkedList*, int);void (*traverse)(struct LinkedList*);} LinkedList;void LinkedList_add(LinkedList* list, int data){// 添加节点的代码}void LinkedList_traverse(LinkedList* list){// 遍历链表的代码}LinkedList* LinkedList_create(){LinkedList* list = (LinkedList*)malloc(sizeof(LinkedList)); list->head = NULL;list->add = LinkedList_add;list->traverse = LinkedList_traverse;return list;}```然后可以在代码中使用该类库:```cLinkedList* list = LinkedList_create();list->add(list, 1);list->add(list, 2);list->traverse(list);```通过类库的封装,我们可以更好地组织和管理代码,实现高度的代码复用和封装。
c面向对象程序设计期末考试题及答案一、选择题(每题2分,共20分)1. 下列哪个是面向对象程序设计的特点?A. 封装B. 继承C. 多态D. 所有选项都是2. 在Java中,以下哪个关键字用于定义类?A. classB. structC. typeD. classdef3. 以下哪个是Java中不允许的类成员访问修饰符?A. publicB. protectedC. privateD. global4. 以下哪个是Java中实现多态的方式?A. 函数重载B. 函数重写C. 接口D. 抽象类5. 在Java中,哪个关键字用于声明一个方法,该方法没有返回值?A. voidB. returnC. noneD. null6. 以下哪个是Java中创建对象的语法?A. new ClassName();B. create ClassName;C. make ClassName;D. ClassName();7. 在Java中,以下哪个是正确的构造方法声明?A. public ClassName();B. public ClassName new();C. public new ClassName();D. public ClassName create();8. 以下哪个是Java中实现继承的方式?A. 使用extends关键字B. 使用implements关键字C. 使用interface关键字D. 使用new关键字9. 在Java中,以下哪个关键字用于实现接口?A. implementsB. extendsC. interfaceD. class10. 以下哪个是Java中实现封装的方式?A. 使用public关键字B. 使用private关键字C. 使用protected关键字D. 使用default关键字答案:1. D2. A3. D4. B5. A6. A7. A8. A9. A10. B二、简答题(每题10分,共20分)1. 简述面向对象程序设计中的“封装”概念及其重要性。
mfc 知识点总结MFC库的基本组成包括以下几个部分:1. CObject类:是所有MFC类的基类,提供了对象的基本功能,包括内存管理、类型信息、对象的打印和序列化等。
2. CWnd类:是窗口类的基类,封装了Windows窗口的创建、显示、消息处理等功能。
3. CFrameWnd类:是框架窗口类,派生自CWnd类,封装了应用程序的主窗口,提供了菜单、工具栏、状态栏等UI组件。
4. CDocument类和CView类:分别是文档类和视图类,用于管理应用程序中的文档和视图。
文档类负责文档的打开、保存、关闭等操作,视图类负责文档内容的显示和交互。
5. CWinApp类:是应用程序类的基类,封装了应用程序的初始化、消息循环、资源管理等功能。
MFC库提供了丰富的类和函数,用于处理Windows应用程序的各个方面,下面将对MFC的一些重要知识点进行总结。
1. 消息处理在MFC应用程序中,窗口的消息处理是至关重要的。
MFC提供了消息映射机制来进行消息处理。
通过DECLARE_MESSAGE_MAP宏和BEGIN_MESSAGE_MAP/END_MESSAGE_MAP 宏,在类中声明消息处理函数并将消息与处理函数进行映射。
例如:```cpp// 声明消息处理函数afx_msg void OnMouseMove(UINT nFlags, CPoint point);// 映射消息到处理函数BEGIN_MESSAGE_MAP(CMyWnd, CWnd)ON_WM_MOUSEMOVE()END_MESSAGE_MAP()```2. 对话框对话框是Windows应用程序中常用的界面元素,用于与用户进行交互。
MFC提供了CDialog类和CDialogEx类来封装对话框。
开发者可以使用资源编辑器创建对话框模板,然后通过类向导生成对话框类。
对话框类中可以处理控件的事件,并通过DoModal函数或Create函数来显示对话框。
c语言结构体封装流程
在C语言中,结构体是一种自定义的数据类型,可以包含多个不同类型的数据成员。
通过结构体,我们可以将相关的数据组合在一起,形成一个有机的整体。
下面是一个简单的结构体封装流程:
1. 定义结构体类型:使用struct关键字定义一个结构体类型,并指定结构体的名称。
例如:
```c
struct Student {
char name[20];
int age;
float score;
};
```
上述代码定义了一个名为Student的结构体类型,包含name、age和score三个数据成员。
2. 创建结构体变量:使用结构体类型创建结构体变量。
例如:
```c
struct Student stu1;
```
上述代码创建了一个名为stu1的结构体变量,类型为Student。
3. 为结构体变量赋值:为结构体变量中的各个数据成员赋值。
例如:
```c
= "Tom";
= 18;
= ;
```
上述代码分别为stu1的name、age和score数据成员赋值。
4. 使用结构体变量:可以使用结构体变量进行各种操作,例如输出结构体变量的值等。
例如:
```c
printf("Name: %s\n", );
printf("Age: %d\n", );
printf("Score: %.2f\n", );
```
上述代码分别输出stu1的name、age和score数据成员的值。
c面向对象程序课程设计一、教学目标本节课的教学目标是让同学们掌握C面向对象程序的基本概念和语法,包括类、对象、继承、多态等核心概念。
通过学习,同学们能够熟练使用C++编写简单的面向对象程序,培养编程思维和解决问题的能力。
同时,在学习过程中,培养同学们的团队合作意识和自主学习能力。
二、教学内容本节课的教学内容主要包括以下几个部分:1.面向对象程序概述:介绍面向对象程序的基本概念,如类、对象、封装、继承、多态等。
2.类和对象:讲解如何定义一个类,如何创建和使用对象,以及构造函数和析构函数的概念。
3.继承:介绍继承的概念和实现方式,以及继承的好处和注意事项。
4.多态:讲解多态的概念、实现方式以及多态的好处。
5.面向对象程序设计实例:通过实例讲解如何运用面向对象程序设计的方法解决实际问题。
三、教学方法为了更好地实现教学目标,本节课采用以下几种教学方法:1.讲授法:讲解面向对象程序的基本概念、语法和实例。
2.讨论法:同学们进行小组讨论,分享学习心得和解决问题的方法。
3.案例分析法:分析实际编程案例,让同学们更好地理解面向对象程序设计的方法。
4.实验法:安排课后的编程实践,让同学们动手编写面向对象的程序,巩固所学知识。
四、教学资源为了支持本节课的教学内容和教学方法的实施,准备以下教学资源:1.教材:《C++面向对象程序设计》等相关教材。
2.参考书:提供一些关于C++面向对象程序设计的参考书籍,供同学们课后自主学习。
3.多媒体资料:制作精美的PPT,直观地展示面向对象程序设计的相关概念和实例。
4.实验设备:提供计算机和编程环境,让同学们能够进行实际的编程练习。
五、教学评估本节课的教学评估将采用多元化的评估方式,以全面、客观、公正地评价同学们的学习成果。
评估方式包括:1.平时表现:考察同学们在课堂上的参与程度、提问回答、小组讨论等,占总评的20%。
2.作业:布置与课程内容相关的编程作业,让同学们巩固所学知识,占总评的30%。
C++程序设计模拟试卷(二)一、单项选择题(本大题共20小题,每小题1分,共20分)在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。
错选、多选或未选均无分。
1. 静态成员函数没有()A. 返回值B. this指针C. 指针参数D. 返回类型答案:B解析:(P107)静态成员函数是普通的函数前加入static,它具有函数的所有的特征:返回类型、形参,所以使用(P107)静态成员函数,指针可以作为形参,也具有返回值。
静态成员是类具有的属性,不是对象的特征,而this表示的是隐藏的对象的指针,因此静态成员函数没有this 指针。
静态成员函数当在类外定义时,要注意不能使用static关键字作为前缀。
由于静态成员函数在类中只有一个拷贝(副本),因此它访问对象的成员时要受到一些限制:静态成员函数可以直接访问类中说明的静态成员,但不能直接访问类中说明的非静态成员;若要访问非静态成员时,必须通过参数传递的方式得到相应的对象,再通过对象来访问。
2. 假定AB为一个类,则执行“AB a(2), b[3],*p[4];”语句时调用该类构造函数的次数为()A. 3B. 4C. 5D. 9答案:B解析:(P79)a(2)调用1次带参数的构造函数,b[3]调用3次无参数的构造函数,指针没有给它分配空间,没有调用构造函数。
所以共调用构造函数的次数为4。
3. 有关多态性说法不正确的是()A. C++语言的多态性分为编译时的多态性和运行时的多态性B. 编译时的多态性可通过函数重载实现C. 运行时的多态性可通过模板和虚函数实现D. 实现运行时多态性的机制称为动态多态性答案:C解析:(P171)多态性分为静态的和动态的。
静态通过函数的重载来实现,动态是通过基类指针或基类引用和虚函数来实现的。
所以错误的是C项。
4. 假定一个类的构造函数为“A(int i=4, int j=0) {a=i;b=j;}”, 则执行“A x (1);”语句后,x.a和x.b的值分别为()A. 1和0B. 1和4C. 4和0D. 4和1答案:A解析:(P75)带默认的构造函数,对应实参没有值时就采用形参值。
面向对象程序设计教程-答案(共19页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--面向对象程序设计教程(C++语言描述)题解与课程设计指导第1章面向对象程序设计概论一、名词解释抽象封装消息【问题解答】面向对象方法中的抽象是指对具体问题(对象)进行概括,抽出一类对象的公共性质并加以描述的过程。
面向对象方法中的封装就是把抽象出来的对象的属性和行为结合成一个独立的单位,并尽可能隐蔽对象的内部细节。
消息是面向对象程序设计用来描述对象之间通信的机制。
一个消息就是一个对象要求另一个对象实施某种操作的一个请求。
二、填空题(1)目前有面向过程的结构化程序设计方法和面向对象的程序设计方法两种重要的程序设计方法。
(2)结构化程序设计方法中的模块由顺序、选择和循环3种基本结构组成。
(3)在结构化程序设计方法中,程序可表示为程序=数据结构+算法;而面向对象的程序设计方法,程序可表示为程序=对象+消息。
(4)结构化程序设计方法中的基本模块是过程;而面向对象程序设计方法中的基本模块是类。
(5)面向对象程序设计方法具有抽象性、封装性、继承性和多态性等特点。
三、选择题(至少选一个,可以多选)(1)面向对象程序设计着重于( B )的设计。
A. 对象B. 类C. 算法D. 数据(2)面向对象程序设计中,把对象的属性和行为组织在同一个模块内的机制叫做( C )。
A. 抽象B. 继承C. 封装D. 多态(3)在面向对象程序设计中,类通过( D )与外界发生关系。
A. 对象B. 类C. 消息D. 接口(4)面向对象程序设计中,对象与对象之间的通信机制是( C )。
A. 对象B. 类C. 消息D. 接口(5)关于C++与C语言的关系的描述中,( D )是错误的。
A. C语言是C++的一个子集B. C语言与C++是兼容的C. C++对C语言进行了一些改进D. C++和C语言都是面向对象的【结果分析】C语言是面向过程的。
第一章测试1.下列说法错误的是()。
A:每一个C++程序都必须有一个main函数B:一般编译系统给出的错误信息有两种,一种是错误,一种是警告C:“#include”,这是C++中的语句D:若一行中出现“//”,则从它开始到本行末尾的全部内容都作为注释答案:C2.若要建立良好的程序设计风格,下面描述正确的是()。
A:程序应简单、清晰、可读性好B:充分考虑程序的执行效率C:符号名的命名只要符合语法就可以D:必要的注释答案:ABD3.编写C++程序一般需经过的几个步骤依次是编辑、编译、连接、调试。
()A:错B:对答案:B4.C++对C语言进行了改进,不仅对C的功能进行了扩充,还增加了面向对象的机制。
()A:对B:错答案:A5.C++只在编译阶段给出错误信息,而在连接阶段不会。
()A:对B:错答案:B第二章测试1.作用域运算符的功能是()。
A:给出的范围B:标识某个成员属于哪一个类C:标识作用域的级别D:指出的大小答案:B2.为了使类中的某个成员不能被类的对象通过成员操作符访问,则不能把该成员的访问权限定义为()。
A:publicB:staticC:protected答案:A3.下面关于类的描述中错误的是()。
A:类是具有共同行为的若干对象的统一描述体B:类是抽象数据类型的实现C:类数据成员必须声明为私有D:类是创建对象的样板答案:C4.在C++的面向对象程序设计中,类与类之间的独立性是通过封装实现的。
()A:对B:错答案:A5.如果class类中的所有成员在定义时都没有使用关键字pubilc,private和protected,则所有成员缺省定义为public。
()A:对B:错答案:B第三章测试1.()的功能是对对象进行初始化。
A:构造函数B:析构函数C:数据成员D:静态成员函数答案:A2.下面对构造函数和析构函数的写法形式上正确的是()。
A:max::max (参数), max::~ max (参数)B:max::max (参数), max::~ max ()C:void max:: max (参数), void max::~ max (参数)D:void max::max(), void max::~ max ()答案:B3.假设getData()函数是一个类的常成员函数,且没有返回值,则应表示为()。
实验1类的封装专业班级学号姓名一、实验目的1.熟悉类定义的一般形式。
2.熟悉对象的定义。
3.构造函数与析构函数的定义4.对象的使用二、实验内容1. 定义一个三维的点类,包含有一个有参的和一个无参的构造函数。
编程实现输入两个点的坐标信息,计算并显示出两点之间的距离。
2. 定义长方形、圆形类、直角梯形类,编程实现这些图形信息的输入,并分别计算其面积和周长。
3. 定义一个学生类,包含信息为:学号、姓名、性别、出生年月、专业、备注。
要求定义一个构造函数和析构函数,编程验证构造函数和析构函数的生成顺序及作用。
三、核心源代码#include "zmlexcapx.h"/***1. 定义一个三维的点类,包含有一个有参的和一个无参的构造函数。
编程实现输入两个点的坐标信息,计算并显示出两点之间的距离。
*/#include<iostream>#include<math.h>using namespace std;class zmlpoint{private:int x;int y;int z;public:zmlpoint(){}zmlpoint(int a , int b , int c){x = a;y = b;z = c;}double distance(zmlpoint &m , zmlpoint &n){int t1;int t2;int t3;double s;t1 = m.x - n.x;t2 = m.y - n.y;t3 = m.z - n.z;s = t1*t1 + t2*t2 + t3*t3;return sqrt(s);}};void main(){int x1,y1,z1;int x2,y2,z2;cout<<"请输入第一个三维点坐标"<<endl;cin>>x1>>y1>>z1;cout<<"请输入第二个三维点坐标"<<endl;cin>>x2>>y2>>z2;zmlpoint point1;zmlpoint point2(x1,y1,z1);zmlpoint point3(x2,y2,z2);cout<<"输出两个点间的距离"<<endl;cout<<point1.distance(point2 , point3)<<endl; }(续)#include "zmlencapx02.h"/***2. 定义长方形、圆形类、直角梯形类,编程实现这些图形信息的输入,并分别计算其面积和周长。
*/#include<iostream>#include<math.h>using namespace std;class zmlbase{public:virtual float area() = 0;virtual float perimeter() = 0;virtual void point(int a , int b){x = a;y = b;cout<<"位置信息:"<<"("<<x<<","<<y<<")"<<endl;}virtual void color(int i ){colorfull = i;cout<<"填充色值为:"<<colorfull<<endl;}protected:int x;int y;int colorfull;};class zmlcircle: public zmlbase{private:float radius;public:zmlcircle(float r){radius = r;}float area(){return radius*radius*3.14;}float perimeter(){return radius*2*3.14;}class zmlrectangle: public zmlbase{private:float l;float w;public:zmlrectangle(float x , float y){ l = x; w = y; }float area(){ return l*w; }float perimeter(){ return 2*(l+w); }};class zmltrapezoidal:public zmlbase{private:float d1; float d2; float h;public:zmltrapezoidal(float a , float b , float c){ d1 = a; d2 = b; h = c; }float area(){ return (d1+d2)*h*0.5; }float perimeter(){ return d1+d2+h+sqrt((d2-d1)*(d2-d1)+h*h); } };void main(){int radius;cout<<"请输入圆的半径"<<endl;cin>>radius;zmlcircle cir(radius);cout<<"输出圆的圆心"<<endl;cir.point(2,2);cout<<"输出圆的面积和周长"<<endl;cout<<cir.area()<<endl<<cir.perimeter()<<endl;zmlrectangle rect(5,2);cout<<"输出矩形的面积和周长"<<endl;cout<<rect.area()<<endl<<rect.perimeter()<<endl;}(续)*3. 定义一个学生类,包含信息为:学号、姓名、性别、出生年月、专业、备注。
要求定义一个构造函数和析构函数,编程验证构造函数和析构函数的生成顺序及作用。
*/#include "zmlencapx03.h"#include <iostream>#include<math.h>#include <stdio.h>#include <string.h>using namespace std;class zmlStudent{protected:int _id; char _name[20];char _sex[4]; int _age;char _major[20]; char _note[200];public:zmlStudent(int id, char name[], char sex[], int age, char major[] , char note[]){_id = id;strcpy(_name, name);strcpy(_sex, sex);_age = age;strcpy(_major, major);strcpy(_note , note);cout<< "学号:"<<_id<<" 姓名:"<<_name<<" 性别:"<<_sex<<" 年龄:"<<_age <<" 专业:"<<_major<<endl;cout<<"备注:"<<_note<<endl;}zmlStudent(zmlStudent &s){ cout<<"copy of"<<s._name<<endl; }~zmlStudent(){ cout<<"Destructing"<<" "<<_name<<endl; }};void main(){zmlStudent zml(109021001,"zhengminli","F",19900528,"computer","I'm a party member");zmlStudent xmg(109021003,"xiangminge","M",19900728,"computer","I am a member");cout<<endl;}四、运行结果(贴图)1、2、3、五、实验成绩。