C面向对象程序设计习题 类与对象

合集下载

《C++面向对象程序设计》试卷08-09-1(原A卷)

《C++面向对象程序设计》试卷08-09-1(原A卷)
初始化并对执行对象的其它内部管理操作
11.P是一个指向类Sample数据成员m的指针,s是类Sample的一具对象,如果要给m赋值为
5,则应写的命令为
12.如果要访问类中说明为private的成员变量,则必须通过________________函数
或____________________函数
13.C++语言中调用重载函数时,区分函数的依据是是和
三角形的面积。重载函数首部如下:5’
double area (double a ); a为正方形的边长
double area (double b, double h); b和h分别为三角形的底和高
C.成员函数可以是静态的D.成员函数可以设置参数的默认值
7.语句for ( int i=0,x=0;!x&&i<=3;i++)循环的次数为( )
A.5 B.4C. 6D.无限
8.表达式18/4*sqrt(4.0)/5值的数据类型是()
A. int B. float
C. doubleD.不确定
9.如果一个类至少有一个纯虚函数,则称该类为()
C.类模板实例化的结果是类D.类模板的基类可以是一个类
12.继承具有( ),即当基类本身也是某一个类的派生类时,底层的派生类也会自动继承
间接基类的成员
A.规律性B.传递性C.重复性D.多样性
13.下列表示引用的方法中,正确的是( )
已知:int m=10;
A.int &z;B.int &y=10;
C. int &x=m;D.float &t=&m;
st=;
int size=outstr.pcount();

面向对象程序设计教程答案

面向对象程序设计教程答案

面向对象程序设计教程(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语言是面向过程的。

C++语言是一种经过改进的更为优化的C语言,是一种混合型语言,既面向过程也面向对象。

(6)面向对象的程序设计将数据结构与( A )放在一起,作为一个相互依存、不可分割的整体来处理。

面向对象程序设计C课后题答案

面向对象程序设计C课后题答案

第一章:面向对象程序设计概述[1_1]什么是面向对象程序设计?面向对象程序设计是一种新型的程序设计范型。

这种范型的主要特征是:程序=对象+消息。

面向对象程序的基本元素是对象,面向对象程序的主要结构特点是:第一:程序一般由类的定义和类的使用两部分组成,在主程序中定义各对象并规定它们之间传递消息的规律。

第二:程序中的一切操作都是通过向对象发送消息来实现的,对象接受到消息后,启动有关方法完成相应的操作。

面向对象程序设计方法模拟人类习惯的解题方法,代表了计算机程序设计新颖的思维方式。

这种方法的提出是软件开发方法的一场革命,是目前解决软件开发面临困难的最有希望、最有前途的方法之一。

[1_2]什么是类?什么是对象?对象与类的关系是什么?在面向对象程序设计中,对象是描述其属性的数据以及对这些数据施加的一组操作封装在一起构成的统一体。

对象可以认为是:数据+操作在面向对象程序设计中,类就是具有相同的数据和相同的操作的一组对象的集合,也就是说,类是对具有相同数据结构和相同操作的一类对象的描述。

类和对象之间的关系是抽象和具体的关系。

类是多个对象进行综合抽象的结果,一个对象是类的一个实例。

在面向对象程序设计中,总是先声明类,再由类生成对象。

类是建立对象的“摸板”,按照这个摸板所建立的一个个具体的对象,就是类的实际例子,通常称为实例。

[1_3]现实世界中的对象有哪些特征?请举例说明。

对象是现实世界中的一个实体,其具有以下一些特征:(1)每一个对象必须有一个名字以区别于其他对象。

(2)需要用属性来描述它的某些特性。

(3)有一组操作,每一个操作决定了对象的一种行为。

(4)对象的操作可以分为两类:一类是自身所承受的操作,一类是施加于其他对象的操作。

例如:雇员刘名是一个对象对象名:刘名对象的属性:年龄:36 生日:1966.10.1 工资:2000 部门:人事部对象的操作:吃饭开车[1_4]什么是消息?消息具有什么性质?在面向对象程序设计中,一个对象向另一个对象发出的请求被称为“消息”。

C++面向对象程序设计(试题与答案)

C++面向对象程序设计(试题与答案)

模拟试题(1)一、判断对错题(10%)(对√,错×)()1.自动变量用堆方式创建,它与块共存亡。

()2.运算符+=是右结合的。

()3.表达式cout<<99的类型为int。

()4.++i是左值,但i++不是左值。

()5.Y[I][J]与*(*Y+I)+J不等价。

()6.从外部看类的private 成员和protected成员有区别。

()7.运算符&不可以重载。

()8.基类的protected成员经过protected派生,在派生类中它变成了private成员。

()9.2.0/-3.0是一个正确的表达式。

()10.字符'\12'的ASCII为12。

二、填空题(20%)#include <iostream.h>typedef struct node{long data;node * next;};class stack{private:node * head;①__________stack();~stack();void push (②__________);③__________ pop();④__________ print();};stack::stack(){ head = new ⑤__________head->next = ⑥__________ }stack::~stack(){node * p;p = head;while (p){head = head->next;⑦__________p = head;}}void stack::push(long x){node * p = new node;p->data = x;p->next = head->next;⑧__________ = p;cout<<"Push" <<x<<" ok !"<<endl;}long stack::pop(){node *p = head->next;if(p!=NULL){long x = p->data;head->next = p->next;⑨__________cout<<"pop "<<x<<" ok !"<<endl;return x;}elsecout<<"Stack is empty !"<<endl;return 0;}void stack::print(){node * p = head->next;cout<<"Stack_Top"<<endl;while (p){cout<<p->data<<endl;⑩__________;}cout<<"Stack_bottom"<<endl;}三、简答题(20%)(按条列出论点)1.注解。

面向对象程序设计习题及答案

面向对象程序设计习题及答案

面向对象程序设计一、选择填空1. 关于C + +与C语言的关系描述中,(D)是错误的。

(A)C语言是C + +的一个子集 (B) C语言与C++是兼容的(C) C++对C语言进行了一些改进(D) C++和C语言都是面向对象的2. 下面关于对象概念的描述中,(B)是错误的。

(A )对象就是C语言的结构变量(B)对象代表着正在创建的系统中的一个实体(C)对象是一个状态的操作(或方法)的封装体(D)对象之间的信息传递是通过消息进行的3. 下面关于类概念的描述中,(D)是错误的。

(A )类是抽象数据类型的实现(B )类是具有共同行为的若干对象的统一描述体(C)类是创建对象的样板(D)类就是C语言的结构类型4. 按照标识符的要求,(A )符号不能组成标识符。

(A )连接符 (B)下划线 (C)大小写字母 (D)数字字符5. 下列符号中,(C)不可作为分隔符。

(A), (B) : (C)? ( D);6. 在16位机中,int型字宽为(A)字节。

(A ) 2 ( B) 4 ( C) 6 (D) 87. 类型修饰符unsigned修饰(D)类型是错误的。

(A)char ( B) int (C) long int (D) float& 对于int *pa[5];的描述,(D)是正确的。

(A)pa是一个指向数组的指针,所指向的数组是5个int型元素(B)pa是一个指向某数组中第5个元素的指针,该元素是int变量(C)pa[5]表示某个数组的第5个元素(D)pa是一个具有5个元素的指针数组,每个元素是一个int型指针。

9. 下列关于指针的运算中,(D)是非法的。

(A)两个指针在一定条件下,可以进行相等或不等的运算。

(B)可以有一个空指针赋值给某个指针。

(C)一个指针可以加上一个整数。

(D)两个指针在一定条件下,可以相加。

10. 指针可以用来表示数组元素,下列表示中( A )是错误的。

已知:int a[3][7];(A)*(a+1)[5] ( B) *(*a+3) (C) *(*(a+1)) (D) *(&a[0][0]+2)11. 下列表示引用的方法中,(A )是正确的。

面向对象程序设计期末复习题资料

面向对象程序设计期末复习题资料

面向对象程序设计期末复习题一、单项选择题1.对于类中定义的成员,其隐含访问权限为【 B 】A) public B) private C) static D)protected2.关于类和对象不正确的说法是【 B 】A) 类是一种类型,它封装了数据和操作 B) 一个类的对象只有一个C) 对象是类的实例D) 一个对象必属于某个类3.下面关于对象概念的描述中,【 C 】是错误的。

A)对象代表着正在创建的系统中的一个实体B)对象就是C语言中的结构体变量C)对象是一个状态和操作(或方法)的封装体D)对象之间的信息传递是通过消息进行的4. 使用派生类的主要原因是【 A 】。

A)提高代码的可重用性B)提高程序的运行效率C)加强类的封装性D)实现数据的隐藏5. 有关析构函数的说法不正确的是【D 】A)析构函数有且只有一个B)析构函数无任何函数类型C)析构函数没有形参D)析构函数的作用是在对象被撤消时收回先前分配的内存空间6. 声明一个类的对象时,系统自动调用一个函数;撤消对象时,系统自动调用一个函数;该函数为【 C 】A) 成员函数;构造函数B) 复制构造函数;析构函数C) 构造函数;析构函数D) 析构函数;复制构造函数7. 下列关于运算符重载的描述中,【 D 】是正确的。

A)运算符重载可以改变操作数的个数B)运算符重载可以改变优先级C)运算符重载可以改变结合性D)运算符重载不可以改变语法结构8. 能用友元函数重载的运算符是【 A】。

A)+ B)= C)[] D)->9.当一个派生类私有继承一个基类时,基类中的所有公有成员和保护成员成为派生类的【 A 】A) private成员B) protected成员C) public成员D) 友元10.在C++中,要实现动态联编,必须使用【D】调用虚函数A) 类名B) 派生类指针C) 对象名D) 基类指针11.若一个类中含有纯虚函数,则该类称为【 A 】A) 抽象类B) 纯基类C) 派生类D) 基类12.当使用ifstream流类定义一个流对象并打开一个磁盘文件时,文件的隐含打开方式【 B 】A) ios:: out B) ios:: inC) ios::in|ios::out D) ios::binary13.通常拷贝构造函数的参数是【 C 】。

C语言程序设计课件第6章 类与对象

C语言程序设计课件第6章 类与对象
(4)构造函数可以重载,即一个类中可以定 义多个参数个数或参数类型不同的构造函数。
2021/7/13
18
【例6.5】 使用构造函数替代例6.3中SetTime() 成员函数,并在主函数中,使用构造函数设置 时间为15时19分56秒并显示该时间。 构造函数也可以重载。关于重载的概念将在第 7章详细介绍,这里先看一个例子。 【例6.6】 构造函数重载定义示例。
【2021例/7/163 .8】 构造函数的调用。
21
6.3.2 析构函数 1.析构函数的特点 当对象创建时,会自动调用构造函数进行初始 化。当对象撤消时,也会自动调用析构函数进 行一些清理工作,如释放分配给对象的内存空 间等。与构造函数类似的是:析构函数也与类 同名,但在名字前有一个“~”符号,析构函数 也具有公有属性,也没有返回类型和返回值, 但析构函数不带参数,不能重载,所以析构函 数只有一个。 【例6.9】 析构函数程序举例。
26
6.4 对象数组与对象指针 6.4.1 对象数组 对象数组是指数组的每一个元素都是相同类型对象的 数组,也就是说,若一个类有若干个对象,把这一系 列的对象用一个数组来表示。对象数组的元素是对象, 不仅具有数据成员,而且还有成员函数。
对象数组的定义和普通数组的定义类似,一般格式如 下: 类名 数组名[第一维大小][第二维数组大小] 其中,类名是指该数组元素属于该类的对象,方括号 内的数组大小给出了某一维元素的个数。一维对象数 组只有一对方括号,二维对象数组要有两个方括号对, 等等。
25
普通构造函数在建立对象时被调用,而复制构造函数
在用已有对象初始化一个新对象时被调用。复制构造
函数被调用通常发生在以下3种情况:
(1)程序中需要新建一个对象并用一个类的对象

C#程序设计:面向对象的编程单元测试与答案

C#程序设计:面向对象的编程单元测试与答案

一、单选题1、面向对象思想的三大基本特征是A.对象,属性,方法B.类,对象,方法C.抽象,继承,派生D.继承,封装,多态正确答案:D2、以下描述中,错误的是A.继承可使派生类继承基类的属性和方法。

B.封装隐藏了实现细节,使代码模块化。

C.继承就是派生类继承了基类的所有方法。

D.多态是通过继承实现的不同对象调用相同的方法,表现出不同的行为。

正确答案:C3、关于类成员的访问修饰符,描述错误的是A.在类前添加访问修饰符,声明了类内部成员对该类的访问权限。

B.在类声明时,访问修饰符是可选部分。

C.public修饰的方法,在类实例化调用时,可用“类名.方法名()”调用。

D.private私有成员和私有字段成员只能被类内部的方法使用和修改。

正确答案:A4、下面关于var关键字的描述,错误的是A.只能在变量声明中包含初始化时使用。

B.一旦编译器推断出变量的类型,它就是固定且不能改变的。

C.能用于局部变量和全局变量。

D.var关键字并不是某种特别类型的符号,它只是句法上的速记,表示任何可以从初始化的右边推断出的类型。

正确答案:C5、关于静态字段的描述,错误是A.一个类的所有对象共享静态字段。

B.如果静态字段的值被一个实例改变,所有实例都可见。

C.静态函数成员能访问实例成员和静态成员。

D.static修饰符声明的字段为静态字段。

正确答案:C6、关于属性的使用正确的是A.private int num;public int Num{get{return num;}set{num=value;}}B.private int num;private int Num{get{return num;}set{num=value;}}C.private int num;public int Num{get{num=value;}set{return num;}}D.private int num;public string Num{get{return num;}set{num=value;}}正确答案:A7、C#中的数据类型的描述,错误的是A.类类型属于引用类型,默认值是null。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

类和对象(一)知识点:1.类与对象的概念,及两者的关系?2.类定义的格式,对象定义的格式,访问对象的成员的格式3.类中成员访问权限有哪几种,它们的特点?4.如何对对象进行初始化?5.构造函数与析构函数的特点,构造函数在哪些情况下被系统自动调用,析构函数什么情况下被调用;存在虚基类的派生类构造函数调用顺序?6.缺省构造函数的特点7.拷贝构造函数的功能与特点8.成员函数与内联函数的区别9.静态成员的概念与作用10.静态成员函数调用格式11.什么是友元,友元的作用12.作用域运算符的功能是什么?它的使用格式如何?13.满足成员函数重载的条件作业题一、选择填空1.在下列关键字中,用以说明类中公有成员的是( )。

A .public;B.private;C.protected;D.friend。

2.下列的各类函数中,( )不是类的成员函数。

A.构造函数;B.析构函数;C.友员函数;D.拷贝初始化构造函数。

3.作用域运算符的功能是( )。

A.标识作用域的级别的;B.指出作用域的范围的;C.给出作用域的大小的;D.标识某个成员是属于哪个类的。

4.( )是不可以作为该类的成员的。

A.自身类对象的指针;B.自身类的对象;C.自身类对象的引用;D.另一个类的对象。

5.( )不是构造函数的特征。

A.构造函数的函数名与类名相同;B.构造函数可以重载;C.构造函数可以重载设置缺省参数;D.构造函数必须指定类型说明。

6.( )是析构函数的特征。

A.一个类中能定义一个析构函数;B.析构函数名与类名不同;C.析构函数的定义只能在类体内;D.析构函数可以有一个或多个参数。

7.通常的拷贝初始化构造的参数是( )。

A.某个对象名;B.某个对象的成员名;C.某个对象的引用名;D.某个对象的指针名。

8.关于成员函数特征的下述描述中,( )是错误的。

A.成员函数一定是内联函数;B.成员函数可以重载;C.成员函数可以设置参数的缺省值;(只能一次)D.成员函数可以是静态的。

9.下述静态数据成员的特性,( )是错误的。

A.说明静态数据成员是前面要加修饰符STATIC;B.静态数据成员要类外进行初始化;C.引用静态数据成员时,要在静态数据成员名前加<类名>和作用域运算符;D.静态数据成员不是所有对象所公的。

10.友员的作用( )。

A.提高程序的运用效率;B.加强类的封装性;C.实现数据的隐藏性;D.增强成员函数的种类。

二、判断下列描述的正确性,对者打√,错者划×。

1.使用关键字class定义的类中缺省的访问权限是私有(private)的。

2.作用域运算符( ::)只能用来限定成员函数所属的类。

(数据成员所属的类)3.析构函数是一种函数体为空的成员函数。

4.析构函数和构造函数都不能重载。

5.说明或定义对象时,类名前面不需要加class关键字。

6.对象成员的表示与结构变量成员表示相同,使用运算符.或—>。

7.所谓私有成员是指只有类中所提供的成员函数才能直接使用它们,任何类以外的函数对它们的访问都是非法的。

8.某类中的友元类的所有成员函数可以存取或修改该类中的私有成员。

9.可以在类的构造函数中对静态数据成员进行初始化。

(类体外)10.如果一个成员函数只存取一个类的静态数据成员,则可将该成员函数说明为静态成员函数。

三、分析下列程序的输出结果。

1.#include<iostream>class A{public:A();A(int i,int j);void print();private:int a,b;};A::A(){a=b=0;cout<<"Default constructor called.\n"; }A::A(int I,int j){a=i;b=j;cout<<" Constructor called.\n";}void A::print(){cout<<"a="<<a<<",b="<<b<<endl; }void main(){A m,n(4,8);m.print();n.print();}Default constructor calledConstructor calleda=0,b=0a=4,b=82.#include<iostream.h>class Count{public:Count () { count++; }static int HM() { return count; }~Count( ) { count--; }private:static int count;};int Count::count=100;void mian(){Count c1,c2,c3,c4;Cout<<Count::HM()<<endl;}104四、按下列要求编写程序。

在一个程序中,实现如下要求:(1)构造函数重载;(2)成员函数设置缺省参数;(3)有一个友元函数;(4)有一个静态函数;(5)使用不同的构造函数创建不同对象。

类和对象(二)练习题1.指向对象的指针如何定义2.对象指针作函数参数与对象作函数参数有何不同?3.什么是this指针?它有何作用?4.什么是对象数组?他如何定义?它如何赋值?5.指向对象数组的指针如何定义?如何赋值?6.使用new和delete创建和删除动态数组的格式如何?7.C++中类型的自动隐式转换有哪些规则?8.构造函数都具有类型转换函数的功能吗?9.什么是转换函数?定义时应注意哪些问题?作业题一、选择填空1.已知:类A中一个成员函数说明如下:void Set(A&a);其中,A&a的含义是()A.指向类A的指针为a;B.将a的地址值赋给变量Set;C.a是类A的对象引用,用来作函数Set()的形参;D.变量A与a按位相与作为函数Set()的参数。

2.下列关于对象数组的描述中,()是错的。

A.对象数组的下标是从0开始的;B.对象数组的数组名是一个常量指针;C.对象数组的每个元素是同一个类的对象;D.对象数组只能赋初值,不能被赋值。

3.下列定义中,()是定义指向数组的指针 p.A.int *p[5];B.int (*p)[5];C.(int *)p[5];D.int *p[]。

4.关于new 运算符的下列描述中,( )是错误的。

A.它可以用来动态创建对象的对象数组;B.使用它创建的对象或对象数组可以使用运算符delete删除;C.使用它创建对象时要调用构造函数;D.使用它创建对象数组时必须指定初始值。

5.关于delete运算符的下列描述中,( )是错误的。

A.它必须用于new返回的指针;B.它也试用于空指针;C.对一个指针可以使用多次该运算符;D.指针名前只用一对方括号符,不管所删除数组的维数。

6.具有转换函数功能的构造函数,应该是( )。

A.不带参数的构造函数;B.带有一个参数的构造函数;C.带有两个以上参数的构造函数;D.缺省构造函数。

二、判断下列描述是否正确,对者划√,错者划×。

1.指向对象的指针和指向类的成员的指针在表示形式上是不相同的。

F2.已知:m是类A的对象,n是类A的公有数据成员,p是指向类A 中n成员的指针。

下列两种表示是等价的:m.n和m .*p T3.指向对象的指针与对象都可以作函数参数,但是使用前者比后者好些。

T4.对象引用作函数参数比用对象之中更方便些。

T5.对象数组的元素可以是不同类的对象。

F6.对象数组既可以赋初值又可以被赋值。

T7.指向数组的指针不一定必须指向数组的首元素。

F 8.转换函数不是成员函数,它是用来进行强制类型转换的。

F(不是改为是)三、分析下列程序的输出结果。

1.#include <iosteam.h>class A{public:A( );A(int I,int j);&A( );void Set(int i,int j) {a=I;b=j;}private:int a,b;};A::A(){a=0;b=0;cout<<”Default constructor called.\n”;}A::A(int i,int j){a=I;b=j;cout<<”Constructor:a=”<<a<<”,b=”<<b<<endl; }A::~A(){cout<<”Destructor called. a=”<<a<<”,b=”<<b<<endl; }void main(){cout<<”Starting1… \n”;A a[3];for(int i=0;i<3;i++)a[i].Set(2*i+1,(i+1)*2);cout<<”Ending1…\n”;cout<<”starting2…\n”;A b[3]={A(1,2),A(3,4),A(5,6)};cout<<”Ending2…\n”;}2.#include<iostream.h>class B{int x,y;public:B();B(int i);B(int i,int j);~B();void print();};B::B(){x=y=0;cout<<”Default constructor called.\n”; }B::B(int i){x=i;y=0;cout<<”Constructor1 called.\n”;}B::B(int i,int j){x=i;y=j;cout<<”Constructor2 called.\n”;}B::~B(){cout<<”Destructor called.\n”;}void B::print(){cout<<”x=”<<x<<”,y=”<<y<<endl;}void main(){B *ptr;ptr=new B[3];ptr[0]=B();ptr[1]=B(5);ptr[2]=B(2,3);for(int i=0;i<3;i++)ptr[I].print();delete[] ptr;}3.#include<iostream.h>class A{public:A(int i=0) {m=i;cout<<”constructor called.”<<m<<”\n”;}void Set(int i) {m=i;}void Print() const {cout<<m<<endl;}~A() {cout<< “destructor called.”<<m<<”\n”;} private:int m;};void fun(const A&c){c.Print();}void main(){fun(5);}。

相关文档
最新文档