C++面向对象程序设计习题 类与对象
- 格式:doc
- 大小:81.00 KB
- 文档页数:14
c面向对象程序设计课后习题面向对象程序设计是一种以对象为基本单位的编程范式,它强调数据和行为的封装、继承和多态性。
以下是一些面向对象程序设计的课后习题,旨在帮助学生巩固和深化对面向对象概念的理解。
习题一:封装的实现1. 定义一个类 `Person`,包含私有属性 `name` 和 `age`。
2. 实现公共方法 `getName()` 和 `setName(String name)` 来获取和设置 `name` 属性。
3. 实现公共方法 `getAge()` 和 `setAge(int age)` 来获取和设置`age` 属性。
4. 添加一个构造器,允许在创建 `Person` 对象时初始化 `name` 和`age`。
习题二:继承的应用1. 定义一个基类 `Vehicle`,包含属性 `speed` 和方法 `move()`.2. 创建一个派生类 `Car`,继承自 `Vehicle`,添加属性 `wheels` 和 `color`.3. 重写 `move()` 方法,以反映汽车的移动特性。
4. 添加一个构造器,允许初始化 `Car` 对象的所有属性。
习题三:多态性的使用1. 定义一个接口 `Animal`,包含一个抽象方法 `makeSound()`.2. 创建几个实现类,如 `Dog`,`Cat`,`Bird`,它们都实现了`Animal` 接口。
3. 为每个类实现 `makeSound()` 方法,以产生不同的声音。
4. 编写一个测试类,创建 `Animal` 类型的数组,包含不同种类的动物对象,并调用 `makeSound()` 方法。
习题四:抽象类的使用1. 定义一个抽象类 `Shape`,包含抽象方法 `calculateArea()`.2. 创建几个具体类,如 `Circle`,`Rectangle`,`Triangle`,它们继承自 `Shape` 并实现 `calculateArea()` 方法。
面向对象程序设计模拟题一、简答题:1. 什么是对象?什么是对象的事件和方法?试列举几个常用的事件和方法?答:对象是代码和数据的组合,可以作为一个单位来处理。
对象可以使应用程序的一部分,也可以是整个应用程序。
对象事件是对象可以识别的动作,即窗体、控件和其他对象可以识别的动作。
常用的事件有Click事件、Paint事件、Load事件等。
方法是对象要执行的动作,常见的有Clear、AddIRem、RemoveITem等。
2.VB有几种类型的表达式?请举例说明。
答:VB有5中类型的表达式,它们是算术表达式(例2*Pi*r*r)、字符串表达式(例“欢迎您”)、日期型表达式(例#11/22/98)、关系表达式(”abc”>”abcd”)和布尔表达式(2<=4AND6>3)。
二、填空题:1.单选按钮用于建立一组多选一的选项供用户选择,即在这些选项中,用户一次只能选择其中的一个选项选项,并且必须选择其中一个选项。
同时,当一个单选钮被选中时,其他选项自动关闭。
2.列表框是以列表形式显示一系列项目和信息,用户可通过单击其中某一项来选择的自己所需项目或信息。
在Windows中,使用列表框输出数据是保证数据标准化的重要手段,它是一个重要的输出控件。
在工具栏中它是一个标着带有滚动条的列表图案的按钮。
3.MsgBox 函数用来在对话框中显示消息,等待用户单击按钮,并返回一个整数,告诉程序用户单击了哪一个按钮。
4.在VB中有三种形式的数组,静态数组、动态的数组和控件数组。
静态数组就是指数组元素的个数在程序运行时保持不变,动态数组是指数组中的元素个数在程序运行时可以变化的数组,控件数组是使用VB中某些常用控件创建的数组。
使用静态数组、动态数组前必须要先声明,才能在程序中使用。
5.VB提供了图形控件,如Shape控件和Line控件。
它们提供一定的绘图样式,虽比较简单,但是使用非常方便,不需要编写代码,只要设置相应的属性即可。
C++面向对象程序设计模拟试题一一、单项选择题(本大题共10小题,每小题2分,共201.说明虚函数的关键字是()。
A. inlinevirtual C. define D. static2.在每个C++程序中都必须包含有这样一个函数,该函数的函数名为()。
A. mainB. MAINC. nameD. function 3.cout是某个类的标准对象的引用,该类是()。
A. ostream B. istream C. stdout D. stdin4.如果在类外有函数调用CPoint::func();则函数func()是类CPoint的()。
A. 私有静态成员函数B. 公有非静态成员函数C. 公有静态成员函数 B. 友元函数5. 如果class类中的所有成员在定义时都没有使用关键字public、private或protected,则所有成员缺省定义为()。
A. publicB. protectedC. private D.static6.一个类的所有对象共享的是()。
A. 私有数据成员 B. 公有数据成员 C. 保护数据成员 D. 静态数据成员7.动态联编所支持的多态性称为()。
A. 虚函数 B. 继承C. 编译时多态性D. 运行时多态性8.定义类模板时要使用关键字()。
A. const B. newC. deleteD. template9.对虚基类的定义()。
A. 不需要使用虚函数 B. 必须使用虚函数C. 必须使用privatD. 必须使用public10.类型转换函数()。
A. 不能带有参数 B. 只能带一个参数 C. 只能带2个参数D. 只能带3个参数二、判断正误题(本大题共6小题,每小题2分,共12分)1.虚函数在基类和派生类之间定义,且要求函数原型完全一致。
()2.抽象类可以用来直接创建对象。
()3.内联函数中可以出现递归语句。
()4.模板类与类模板的意义完全相同。
()5.常对象只能调用常成员函数。
c++类与对象题目1、什么是类和对象?它们在C++中有什么作用?答:类是定义对象的模板,它描述了对象的数据成员和成员函数。
对象是根据类创建的实例,具有类定义的属性和行为。
类和对象是面向对象编程的基础。
2、创建一个C++类并定义它的成员变量和成员函数。
答:下面是一个简单的C++类示例,它有一个整数类型的成员变量和一个成员函数,该函数返回成员变量的值:cclass MyClass {public:int myVariable;int getMyVariable() {return myVariable;}};3、创建一个对象并使用它调用类的成员函数。
答:下面是一个示例代码,创建一个MyClass类的对象,并使用该对象调用getMyVariable()成员函数:cMyClass obj; // 创建一个MyClass 类的对象int x = obj.getMyVariable(); // 使用对象调用成员函数4、什么是构造函数?如何在C++类中定义构造函数?答:构造函数是一个特殊的成员函数,它会在创建对象时自动调用。
它用于初始化对象的成员变量。
在C++类中,可以使用关键字“构造函数”来定义构造函数。
例如:cclass MyClass {public:int myVariable;MyClass(int value) { // 定义构造函数myVariable = value;}};5、什么是析构函数?如何在C++类中定义析构函数?答:析构函数是一个特殊的成员函数,它会在删除对象时自动调用。
它用于释放对象使用的资源。
在C++类中,可以使用关键字“析构函数”来定义析构函数。
例如:cclass MyClass {public:~MyClass() { // 定义析构函数// 释放对象使用的资源}};。
C++语言与面向对象的设计第1至13章习题参考答案习题1参考答案1 用最简练的语言解释下列词汇在面向对象程序设计中的含义:对象,类,方法,接口,消息,封装,继承,服务答:对象是客观世界中的实体在计算机中的表示。
是一组数据成员和方法成员的封装体。
是类类型的实例。
类是一种抽象数据类型。
是一组对象共性的描述。
方法是在一个类中定义的过程或函数,实现类的功能的代码。
接口是对象封装体向外部公布的一组具有公有属性的方法。
是从对象外部与对象通信的唯一途径。
消息是对象之间的通信机制,对象的客户通过接口方法调用请求对象服务称为消息调用。
对象之间通过消息传递,互相协调、配合,共同实现软件系统的整体设计目标。
消息的载体是对象提供的公有方法,即对象的接口。
封装有以下两重含义:首先,是指将描述客观实体数据特征的数据和方法特征的代码组织在一起,作为一个整体,并为该整体命名标识,以区别于其它数据和程序代码。
其次,通过对该整体内成员的访问属性的规定,使一部分成员的隐藏起来,对于封装体外成为不可见的,同时使另一部分成员对外开放,作为与外部交流的接口。
继承是面向对象程序设计方法中描述的两个类之间一种增量包含关系。
这两个类具有一种父子关系,子类通过为父类添加新的成员而创建。
继承提供了利用一个类的代码创建新类的重用方法。
继承关系也是对客观世界分类层次关系的一种模拟。
服务即对象通过公有方法向外部提供功能。
1. 2 试列举过程化、模块化、结构化等程序设计方法的主要特点。
面向对象程序设计是如何包容和吸收其它几种程序设计方法的有用成分的。
答:过程化程序设计方法以过程或函数作为程序的基本构造单位。
侧重于算法表达和过程间参数传递的组织。
模块化程序设计方法以独立编译的源程序模块作为大型应用程序的基本组织单位。
注重于应用程序的开发管理。
包括系统开发的任务分解、模块间通信管理、可重用代码库的组织、由不同语言生成的目标模块的连接等方面。
结构化等程序设计方法以单入口单出口的可嵌套基本控制结构作为程序构造单位。
c 面向对象程序设计教程习题答案C面向对象程序设计教程习题答案在学习C面向对象程序设计的过程中,习题答案是非常重要的一部分。
通过练习习题,可以加深对知识点的理解,提高编程能力。
下面我们就来看一些常见的C面向对象程序设计习题及其答案。
1. 什么是面向对象程序设计?面向对象程序设计是一种程序设计范式,它以对象为中心,通过封装、继承和多态等特性来组织和管理代码。
面向对象程序设计可以提高代码的可维护性和可重用性,是现代软件开发中非常重要的一部分。
2. 什么是类和对象?类是一种抽象的数据类型,它描述了一类对象的共同特征和行为。
对象是类的实例,它具体描述了一个具体的实体。
在C面向对象程序设计中,类和对象是非常重要的概念。
3. 请编写一个简单的类和对象的例子。
```c#include <stdio.h>// 定义一个简单的类class Person {public:int age;char name[20];void display() {printf("Name: %s, Age: %d\n", name, age);}};int main() {// 创建一个对象Person p;p.age = 25;strcpy(, "Alice");p.display();return 0;}```4. 什么是封装?封装是面向对象程序设计中的一种重要特性,它将数据和行为封装在一个类中,对外部隐藏了内部的实现细节。
封装可以保护数据的安全性,同时提供了简单的接口供外部访问。
5. 请编写一个简单的封装例子。
```c#include <stdio.h>// 定义一个简单的类class Circle {private:double radius;public:void setRadius(double r) {radius = r;}double getArea() {return 3.14 * radius * radius;}};int main() {// 创建一个对象Circle c;c.setRadius(5.0);printf("Area: %f\n", c.getArea());return 0;}```以上就是一些常见的C面向对象程序设计习题及其答案。
第6章面向对象程序设计一. 选择题1.下面有关类和对象的说法中, 不对的的是【】。
A) 类是系统提供的一种数据类型B) 对象是类的实例C) 类和对象的关系是抽象和具体的关系D) 任何一个对象只能属于一个具体的类2. 面向对象的特点重要概括为【】。
A) 可分解性、可组合型性和可分类性B) 继承性、封装性和多态性C) 封装性、易维护性、可扩展性和可通用性D) 抽象性、继承性和封装性3. 要使一个类能被同一命名空间中的其他类访问, 但不能被这个命名空间以外的类访问, 该类可以【】。
A) 不使用任何修饰符B) 使用private修饰符C) 使用public修饰符D) 使用internal修饰符4. 在C#中, 【】访问修饰符修饰的字段只能由当前程序集访问。
A) private B) public C) protected D) internal5. 类的字段和方法的默认访问修饰符是【】。
A) public B) private C) protected D) internal6. 下列关于构造函数的描述中, 不对的的是【】。
A) 构造函数中, 不可以包含return语句B) 一个类只能有一个构造函数C) 实例构造函数在生成类实例时被自动调用D) 用户可以定义无参构造函数7. 下列关于构造函数的描述中, 【】是对的的。
A) 构造函数名必须与类名相同B) 构造函数不可以重载C) 构造函数不能带参数D) 构造函数可以声明返回类型8. 下列的【】不是构造函数的特性。
A) 构造函数的函数名与类名相同B) 构造函数可以重载C) 构造函数可以带有参数D) 可以指定构造函数的返回值类型9. 类ClassA有一个名为M1的方法, 在程序中有如下一段代码, 假设该段代码是可以执行的, 则声明M1方法时一定使用了【】修饰符。
ClassA Aobj=new ClassA();ClassA.M1();A) public B) public static C) private D) virtual10. 在C#中, 从属性的读写特性上来进行分类, 可以划分为以下3种, 除了【】。
一、填空题(每空1分,共14分)1、观看以下程序:class point{public:void show() {cout<<”point”<<endl;}};void main(){point p1;point *p;p=&p1;_______________//通过对象p1访问show函数______________//通过指针p访问show函数}2、在C++类中可以包含______________、______________和______________三种具有不同访问控制权的成员。
3、定义类时,在类头中将使用关键字_____________来表示类定义的开始。
4、如果一个类中至少有一个纯虚函数,则该类称为________________。
5、C++类的组成包括数据成员和______________,友元_____(是、不是)该类的成员函数。
6、友员函数是用关键字____________修饰的非成员函数。
7、若有:int i;int &j=i;i=10;j=i+1;则i=__________,j=__________。
8、 new的功能是____________________,delete的功能是____________________。
二、选择题(每小题1.5分,共30分)1、下列特性中不是面向对象程序设计语言所特有的是()。
(A)数据封装(B)继承(C)多态性(D)模板2、()是给变量取一个别名,它引入了变量的同意词。
(A)指针(B)引用(C)枚举(D)结构3、类成员的访问权限中,()只能被本类的成员函数和其友元函数访问。
(A)share (B)public (C)private (D)protected4、关于构造函数,下列说法不正确的是()。
(A)构造函数名字和类名相同(B)构造函数在创建对象时自动执行(C)构造函数无任何函数返回类型(D)构造函数有且只有一个5、派生类可以访问其基类的()。
1.下列哪个选项最准确地描述了面向对象编程中的“封装”概念?o A. 它允许一个类继承另一个类的属性和方法。
o B. 它是对象能够根据不同的调用者表现出不同行为的能力。
o C. 它指的是将数据和操作数据的方法绑定在一个对象中,隐藏对象的内部状态。
o D. 它是将复杂系统分割为更小、更可管理的模块的过程。
答案:C解析:封装是将对象的属性和行为包装在一起,控制对内部状态的访问,从而增强数据安全性和降低代码耦合度。
2.在多态背景下,下列哪个场景示例了运行时多态性?o A. 重载构造函数创建不同类型的对象。
o B. 子类覆盖父类的方法,在运行时根据对象类型调用相应的方法。
o C. 定义一个类的多个实例,每个实例有不同的状态(如变量值)。
o D. 使用抽象类保证子类必须实现某些方法。
答案:B解析:运行时多态性主要体现在子类覆盖父类的方法,根据对象的实际类型在运行时动态选择要调用的方法。
3.哪个关键字在C++中用于实现继承?o A. finalo B. abstracto C. classo D. extends答案:C解析:在C++中,使用class关键字后跟冒号和基类名称来实现继承。
其他选项不是C++中的关键字或不用于继承。
4.在面向对象编程中,抽象类的主要作用是什么?o A. 它不能被实例化,因此不适合创建对象。
o B. 它提供了一个模板,包含了一些可以被继承的抽象方法,要求子类实现这些方法。
o C. 它用于封装数据,而不提供任何行为。
o D. 它用于封装具体类的实现细节,提高代码的复用性。
答案:B解析:抽象类可以包含抽象方法,这些方法没有实现,目的是为了要求子类必须提供这些方法的具体实现,从而达到代码的结构化和模块化。
5.C++中,命名空间的主要目的是什么?o A. 提高性能,减少编译时间。
o B. 使代码更易于阅读和理解。
o C. 实现代码的多态性。
o D. 避免全局命名冲突,组织代码结构。
答案:D解析:命名空间在C++中用于组织代码,避免全局命名冲突,使代码更加模块化。
《C++面向对象程序设计》习题解答陈腊梅目录第一章面向对象程序设计概述.............................................................. 错误!未定义书签。
第二章对C语言的基础扩充................................................................... 错误!未定义书签。
第三章类和对象的初步探讨 ................................................................. 错误!未定义书签。
第四章类和对象的进一步解析.............................................................. 错误!未定义书签。
第五章在对象中使用运算符—运算符重载.......................................... 错误!未定义书签。
第六章继承与派生 (2)第七章多态性与虚函数 (2)第一章面向对象程序设计概述一、选择题二、填空题1、多态性2、成员函数3、抽象4、处理这些数据的操作或处理这些数据的函数5、面向对象分析、面向对象分析、面向对象编程、对象对象测试、面向对象维护第二章对C语言的基础扩充二、程序阅读题1答案a=639,b=78,c=122答案a=5,b=8a=8,b=53答案104答案x=20.6 y=5 z=Ax=216.34 y=5 z=Ax=216.34 y=2 z=Ax=216.34 y=2 z=E5答案ic=11fc=7.82ic=5fc=2.15第三章类和对象的初步探讨一、选择题二、填空题1 数据成员、成员函数2 private 、protected 、public3 指向对象的指针、对象的引用4 属性、行为、属性、行为5 对象、属性和操作这些属性的操作、对外隐藏四、程序改错题#include <iostream>using namespace std;class Clock{//public:void set_clock(void);void show_clock(void);//private:int hour;int minute;int second;};Clock clock;int main( ){clock.set_clock( );clock.show_clock ( );//return 0 ;}void Clock::set_clock(void){cin>>hour;cin>>minute;cin>>second;}void Clock::show_clock(void){cout<<hour<<":"<<minute<<":"<<second<<endl;}第四章类和对象的进一步解析二、填空题1 this2所有成员3友元类、友元函数4 friend5 程序编译、程序结束三、程序阅读题1答案Default constructor called.constructor called.0,06,86,8Destructor called.0,0Destructor called.2答案x!=y3答案Initalizing defaultInitalizing default0 0Destructor is activeDestructor is active4答案n=2,sum=2n=3,sum=5n=5,sum=105答案x=36答案x=1,y=2x=30,y=407答案1 2 3 4 4exit main3 2 1 08答案n=1009答案the student is:Li Huthe teacher is:Wang Ping10答案211答案1035,789.50412答案13答案constructing object:x=1第五章在对象中使用运算符—运算符重载二、程序完善题1(1)A A::operator+(A &b)(2){ A temp;temp.i = i+b.i;return temp; }三、程序阅读题1.答案n=4n=3232.答案c1=10 c2=20c1=100 c2=200c1=11 c2=21c1=100 c2=2003.答案1 2 4 7 11 16第六章派生与继承1 继承2 具体化、抽象3 公有继承、保护继承、私有继承4 子对象5 public(共有的)、protected(保护的)、不可访问6 protected(保护的)、protected(保护的)、不可访问的7 private(私有的)、private(私有的)、不可访问的8 二义性1.C++语言中,既允许单继承,又允许多继承。
类和对象(一)知识点: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.成员函数可以是静态的。
第06章类和对象1.填空题(1)类和对象是面向对象程序设计的两个最本概念,__表示抽象的概念,而__则是__的实例化。
(2)类的成员包括__和__两类。
(3)类的数据成员__在类的定义时进行初始化。
(能/不能)(4)类成员的访问方式包括__、__和__3种,默认的访问方式是__。
(5)类的__是为类的所有对象所共有的。
(6)类中声明友元的关键是__。
(7)在类的外部定义成员函数时应在函数的前面加上__和__。
(8)访问对象的成员有__、__和__3种格式。
(9)__函数和__函数是类的两种特殊的成员函数。
__函数负责完成对象的创建和初始化工作,__函数负责完成对象消失时的内存清理工作。
(10)类的__成员和__成员需要初始化表的方式提供初值。
(11)类的静态数据成员的初始化应该写在__区域上,而且要指明__和__。
(12)常对象只能调用类中的__函数,该函数为类的__函数。
(13)类的私有成员和保护成员只能被该类的__函数和__函数访问。
(14)C++中的类的成员指针有__指针和__指针。
(15)类的每一个成员函数都有一个隐含定义的指针,称为__指针,它的类型是成员函数所属类的类型。
(16)对象之间成员级的拷贝,称为__,可以采用默认的拷贝的构造函数。
2.选择题(1)下列关于和对象的描述上,不正确的是()。
(A)一个对象只能属于一个类。
(B)对象是类的一个实例。
(C)一个类只能有一个对象。
(D)类和对象的关系与数据类型和变量的关系类似。
(2)若有如下类声明:class A{int a;}则A类的成员a是()。
(A)公有数据成员(B)公有的成员函数(C)私有数据成员(D)私有成员函数(3)下列关于成员函数的描述中,不正确的是()。
(A)成员函数可以重载。
(B)成员函数一定是内联函数(C)成员函数可以是静态的(D)成员函数可以设置参数的默认值(4)在类外定义成员函数时,需要在函数名前加上()。
(A)对象名(B)类名(C)类名和作用域运算符(D)作用域运算符(5)下列关于this指针的描述中,正确的是()。
C++面向对象程序设计300题1. 面向对象的程序设计思想是什么?答:把数据结构和对数据结构进行操作的方法封装形成一个个的对象。
2. 什么是类?答:把一些具有共性的对象归类后形成一个集合,也就是所谓的类。
3. 对象都具有的二方面特征是什么?分别是什么含义?答:对象都具有的特征是:静态特征和动态特征。
静态特征是指能描述对象的一些属性,动态特征是指对象表现出来的行为4. 在头文件中进行类的声明,在对应的实现文件中进行类的定义有什么意义?答:这样可以提高编译效率,因为分开的话只需要编译一次生成对应的.obj文件后,再次应用该类的地方,这个类就不会被再次编译,从而大大提高了效率。
5. 在类的内部定义成员函数的函数体,这种函数会具备那种属性?答:这种函数会自动为内联函数,这种函数在函数调用的地方在编译阶段都会进行代码替换。
6. 成员函数通过什么来区分不同对象的成员数据?为什么它能够区分?答:通过this指针来区分的,因为它指向的是对象的首地址。
7. C++编译器自动为类产生的四个缺省函数是什么?答:默认构造函数,拷贝构造函数,析构函数,赋值函数。
8. 拷贝构造函数在哪几种情况下会被调用?答:1.当类的一个对象去初始化该类的另一个对象时;2.如果函数的形参是类的对象,调用函数进行形参和实参结合时;3.如果函数的返回值是类对象,函数调用完成返回时。
9. 构造函数与普通函数相比在形式上有什么不同?(构造函数的作用,它的声明形式来分析)答:构造函数是类的一种特殊成员函数,一般情况下,它是专门用来初始化对象成员变量的。
构造函数的名字必须与类名相同,它不具有任何类型,不返回任何值。
10. 什么时候必须重写拷贝构造函数?答:当构造函数涉及到动态存储分配空间时,要自己写拷贝构造函数,并且要深拷贝。
11. 构造函数的调用顺序是什么?答:1.先调用基类构造函数2.按声明顺序初始化数据成员3.最后调用自己的构造函数。
12. 哪几种情况必须用到初始化成员列表?答:类的成员是常量成员初始化;类的成员是对象成员初始化,而该对象没有无参构造函数。
专题5 类与对象的创建和使用一、选择题1.方法内定义的变量(c )。
A.一定在方法内所有位置可见B.可能在方法的局部位置可见C.在方法外可以使用D.在方法外可见2.方法的形参(a )。
A.可以没有B.至少有一个C.必须定义多个形参D.只能是简单变量3.return语句(b)。
A.不能用来返回对象B.只可以返回数值C.方法都必须含有D.一个方法中可以有多个4.main()方法的返回值类型是(c )。
A.boolean B.intC.void D.static5.编译并运行下面的程序,运行结果是()。
public class A{public static void main(String args[]){A a=new A();a.method(8);}void method(int i){System.out.println(“int: ”+i);}void method(long i){System.out.println(“long: ”+i);}A.程序可以编译运行,输出结果为:“int: 8”B.程序可以编译运行,输出结果为:“long: 8”C.程序有编译错误,因为两个method()方法必须定义为静态(static)的D.程序可以编译运行,但是没有输出6.能作为类及其成员的修饰符是(d )。
A.interface B.classC.protected D.public7.下列方法定义中,方法头不正确的是()。
A.public static x(double a){…} B.public static int x(double y){…} C.void x(double d){…} D.public int x(){…}8.构造方法合时被调用(d )。
A.类定义时B.使用对象的变量时C.调用对象方法时D.创建对象时9.下列哪个类声明是正确的(a )。
A.public abstract class Car{…} B.abstract private move(){…} C.protected private number; D.abstract final class H1{…} 10.下列不属于面向对象程序设计的基本特征的是()。
1、面向对象程序设计将描述事物的数据与封装在一起,作为一个相互依存、不可分割的整体来处理。
A) 信息B) 数据隐藏C) 对数据的操作D) 数据抽象2、下列语句中,错误的是。
A) int *p=new int(5);B) int *p=new int[5];C) int *p=new int [20][(0);D) int *p=new int;3、下面有关类和对象的说法中,正确的是。
A) 系统为类和对象分配内存空间B) 类和对象没有区别C) 系统为类分配存储空间,不为对象分配存储空间D) 类与对象的关系和数据类型与变量的关系类似4、下列有关类和对象的说法中,不正确的是。
A) 任何一个对象只能属于一个类B) 对象是类的一个实例C) 类实质上是一种数据类型D) 一个类只能有一个对象5、下列说法中,不正确的是。
A) 要在类的外部直接使用类的私有成员是错误的B) 一个对象数组中的所有数组元素属于同一个类C) 当在类外部定义成员函数时,必须在函数名前加上类名和作用域运算符D) 同一个类的两个对象占用相同的内存空间6、在声明类时,下面的说法正确的是。
A) 数据成员的数据类型可以是registerB) 可以在类的声明中给数据成员赋初值C) 没有用private,public,protected定义的数据成员是公有成员D) 定义时,private,public,protected可以按任意顺序出现7、下列关于构造函数的描述中,正确的是。
A) 构造函数必须带有参数B) 构造函数可以带有返回值C) 构造函数的名字与类名完全相同D) 构造函数必须定义,不能默认8、下列有关析构函数叙述中,不正确的是。
A) 析构函数必须与类名相同,并在其前面加上符号~,以便和构造函数名区别B) 析构函数不能带有任何参数,不能有返回值C) 析构函数可以重载D) 对于全局定义的对象,在程序开始时调用构造函数,到程序结束时调用析构函数9、关于成员函数特征的下列叙述中,是错误的。
面向对象程序设计复习题一、单项选择题1.下面关于对象概念的描述中,_______是错误的;BA.对象代表着正在创建的系统中的一个实体B.对象就是C语言中的结构体变量C.对象是一个状态和操作或方法的封装体D.对象之间的信息传递是通过消息进行的2. 继承机制的作用是: CA.信息隐藏B.数据封装C.定义新类D.数据抽象3.有关析构函数的说法不正确的是_________DA.析构函数有且只有一个B.析构函数无任何函数类型C.析构函数没有形参D.析构函数不能是虚函数4.友元的作用之一是__________AA.提高程序的运行效率B.加强类的封装性C.实现数据的隐藏性D.增加成员函数的种类5.通常拷贝构造函数的参数是__________;CA.某个对象名B.某个对象的成员名C.某个对象的引用名D.某个对象的指针名6.如果在基类中将show声明为不带返回值的纯虚函数,正确的写法是________;Cshow=0; void show;void show=0; show=0 virtual;7.下面关于友元的描述中,错误的是_________;DA.友元函数可以访问该类的私有数据成员B.一个类的友元类中的成员函数都是这个类的友元函数C.友元可以提高程序的运行效率D.类与类之间的友元关系可以继承8.在C++中,_________运算符不能重载;BA. +B.: D.<=9.下列关于运算符重载的描述中,________是正确的;DA.运算符重载可以改变操作数的个数B.运算符重载可以改变优先级C.运算符重载可以改变结合性D.运算符重载不可以改变语法结构10. 在下列函数原型中,可以作为类AA构造函数的是_________DA.void AAint ; B.int AA ; C.AAintconst; D.AAint;11.在声明类时,下面的说法正确的是_________;CA.可以在类的声明中给数据成员赋初值B.数据成员的数据类型可以是register,public,protected可以按任意顺序出现D.没有用private,public,protected定义的数据成员是公有成员12.继承具有________,即当基类本身也是某一个类的派生类时,底层的派生类也会自动继承间接基类的成员;BA.规律性B.传递性C.重复性D.多样性13.在多重继承中,公有派生和私有派生对于基类成员在派生类中的可访问性与单继承的规则___________;AA.完全相同B.完全不同C.部分相同,部分不同D.以上都不对14.对虚函数的调用__________;DA.一定使用动态联编B.必须使用动态联编C.一定使用静态联编D.不一定使用动态联编15.关于成员函数特征的下述描述中,_______是错误的;AA.成员函数一定是内置函数B.成员函数可以重载C.成员函数可以设置参数的默认值D.成员函数可以是静态的16. 下面关于c++语言变量的叙述错误的是_______BA.在c++语言中变量分为auto,static,extern和register四种存储类型B.自动变量和外部变量的作用域为整个程序C.内部变量的作用域是定义它的函数D.外部静态变量的作用域是定义它的文件17.下列的各类函数中,_______不是类的成员函数;CA.构造函数B.析构函数C.友元函数D.拷贝构造函数18. 有如下类声明:class Foo {ing bar ;};则Foo类的成员bar是_________CA.公有数据成员B.公有成员函数C.私有数据成员D.私有成员函数19.下列表示引用的方法中,__________是正确的;已知:int m=10; DA. float &t=&m; &y=10; &z; D. int &x=m;20.设置虚基类的目的是________;BA.简化程序B.消除二义性C.提高运行效率D.减少目标代码21.对于类中定义的成员,其隐含访问权限为________B22.关于类和对象不正确的说法是________ BA.类是一种类型,它封装了数据和操作B.一个类的对象只有一个C.对象是类的实例D.一个对象必属于某个类23.声明一个类的对象时,系统自动调用一个函数___c___;撤消对象时,系统自动调用一个函数;该函数为___c___A.成员函数;构造函数B.复制构造函数;析构函数C.构造函数;析构函数D.析构函数;复制构造函数24.当一个派生类私有继承一个基类时,基类中的所有公有成员和保护成员成为派生类的__A______ 成员成员成员 D.友元25.在C++中,要实现动态联编,必须使用_____D___调用虚函数A.类名B.派生类指针C.对象名D.基类指针26.若一个类中含有纯虚函数,则该类称为____A____A. 抽象类B. 纯基类C.派生类D. 基类27.下列关于this指针的叙述中,正确的是___D_____A.任何与类相关的函数都有this指针B.类的成员函数都有this指针C.类的友元函数都有this指针D.类的非静态成员函数才有this指针28.有如下类声明:class Book {int num ;};则Book类的成员num是___D_____A.公有数据成员B.公有成员函数C.私有数据成员D.私有成员函数29.下面有关重载函数的说法中正确的是___C_____A.重载函数必须具有不同的返回值类型;B.重载函数形参个数必须不同;C重载函数必须有不同的形参列表; D.重载函数名可以不同;30.设置虚基类的目的是___A_____A.消除二义性B.简化代码C.提高运行效率D.减少目标代码31.在C++语言程序中,对象之间的相互通信通过___B_____A.继承实现B.调用成员函数实现C.封装实现D.函数重载实现32.下列运算符中,在C++语言中不能重载的是__C______A. B.>= C.:: D./33.下面对友元函数描述正确的是___C_____A.友元函数的实现必须在类的内部定义B.友元函数是类的成员函数C.友元函数破坏了类的封装性和隐藏性D.友元函数不能访问类的私有成员34.下面叙述不正确的是___A_____A.基类的保护成员在派生类中仍然是保护成员B.基类的保护成员在公有派生类中仍然是保护成员C.基类的保护成员在私有派生类中是私有成员D.对基类成员的访问必须是无二义性35.下面对静态数据成员的描述中,正确的是___D_____A.静态数据成员可以在类体内进行初始化B.静态数据成员不可以被类的对象调用C.静态数据成员不能受private控制符的作用D.静态数据成员可以直接用类名调用36.在C++类语言体系中,不能被派生类继承的有_______BA.转换函数B.构造函数C.虚函数D.静态成员函数37.在类的定义中,用于为对象分配内存空间,对类的数据成员进行初始化并执行其他内部管理操作的函数是____C____A.友元函数B.虚函数C.构造函数D.析构函数38.下列关于虚基类的描述中,错误的是_B_______A.设置虚基类的目的是为了消除二义性;B.虚基类的构造函数在非虚基类之后调用;C.若同一层包含多个虚基类,这些基类的构造函数按照它们的次序调用;D.若虚基类由非基类派生而来,则仍然先调用基类构造函数,再用派生类的构造函数;39.考虑函数原型voidtestinta,int b=7,char="",下面的函数调用中,属于不合法调用的是___C_____A. test5 5,8 6,"" 0,0."";40.下列关于构造函数的描述中,错误的是___D_____A.构造函数可以设置默认参数;B.构造函数在定义类对象时自动执行C.构造函数可以是内联函数;D.构造函数不可以重载41.在重载一个运算符时,如果其参数表中有一个参数,则说明该运算符是 ; DA.一元成员运算符 B.二元成员运算符 C.一元友元运算符 D.选项B和选项C都可能42.在公有派生情况下,有关派生类对象和基类对象的关系,下列叙述不正确的是 ; CA.派生类的对象可以赋给基类的对象 B.派生类的对象可以初始化基类的引用C.派生类的对象可以直接访问基类中的成员 D.派生类的对象的地址可以赋给指向基类的指针43.下面关于虚函数的描述,错误的是 ; BA.在成员函数声明的前面加上virtual修饰,就可把该函数声明为虚函数B.基类中说明了虚函数后,派生类中对应的函数也必须说明为虚函数C.虚函数可以是另一个类的友元函数,但不能是静态成员函数D.基类中说明的纯虚函数在其任何派生类中都必须实现44.定义派生类时,若不使用关键字显示地规定采用何种继承方式,则默认方式为 ; AA.私有继承 B.非私有继承 C.保护继承 D.公有继承45.有如下程序:includeusing namespace std;class ONE{int c;public:ONE:c0{cout<<1;}ONEint n:cn{cout<<2;}};class TWO{ONE onel;ONE one2;public:TWOint m:one2m{cout<<3;}};int main{TWO t 4 ;return 0 ;}运行时的输出结果是 ; CA.3B.23C.123D.21346.关于静态数据成员的描述中正确的是DA类的静态数据成员不是类的所有对象共享的数据B类的静态数据成员不能被类的成员函数调用C类的静态数据成员不能被类的构造函数调用D类的静态数据成员必须进行初始化47下面正确的是,在父类中的访问属性访问修饰符在子类中的访问属性CApublic,private不能直接访问 Bprotect,public,publicCprivate,public不能直接访问 Dprotect,private,protect48类A是类B的友元,类B是类C的友元,则下列说法正确的是DA类B是类A的友元B类C是类A的友元C类A是类C的友元D以上都不对49下列关于构造函数说法不正确的是CA构造函数必须与类同名 B构造函数可以省略不写C构造函数必须有返回值 D在构造函数中可以对类中的成员进行初始化50.类的析构函数的作用是DA一般成员函数的初始化 B类的初始化C对象的初始化D删除类创建的对象51.下列说法正确的是BA内联函数在运行时是将该函数的目标代码插入每个调用该函数的地方B内联函数在编译时是将该函数的目标代码插入每个调用该函数的地方C类的内联函数必须在类体内定义D类的内联函数必须在类体外通过加关键字inline定义52.下面对静态数据成员的描述中,正确的是DA静态数据成员可以在类体内进行初始化B静态数据成员不可以被类的对象调用C静态数据成员不能受private控制符的作用D静态数据成员可以直接用类名调用二、知识点1.实现运行时的多态性要使用虚函数;2.如果一个类至少有一个纯虚函数,那么就称该类为抽象类;3. 运算符重载不能改变操作符的个数、运算符的优先级、运算符的结合性和运算符的语法结构;4. 构造函数是一种特殊的成员函数,它主要用来为对象分配内存空间,对类的数据成员进行初始化并执行对象的其他内部管理操作;5. 静态成员函数不能直接引用类中说明的非静态成员;6. 引用是给对象取一个别名,它引入了对象的同义词;7.设置友元函数的目的是为能够访问该类的私有成员;8.运算符重载仍然保持原来的优先级、结合性和语法结构;9.基类的私有成员不能被派生类的成员访问;10.静态联编支持的多态性称为编译时的多态性,也称静态多态性;11.任何类中允许有三种访问权限的数据,这三种访问权限分别是public、private、protected;12.为了满足运算符“+”的可交换性,必须将其重载为友元函数;13.对于含有对象成员的派生类,其构造函数的执行顺序为:先执行基类的构造函数、再执行对象成员的构造函数,后执行派生类的构造函数;14.利用成员函数对双目运算符重载,其左操作数为this指针指出的对象,右操作数为成员函数参数;++允许在相同的作用域内以相同的名字定义几个不同实现的函数,称这种同一个函数名多个含义的现象为函数重载;16.通过使用new和delete两个运算符进行的分配为动态存储分配;17.当类定义中有数据成员为指针时,解决浅拷贝出现的运行错误的方法是编写拷贝构造函数;18.如果使用protected继承基类,其公有成员就会变成派生类的保护成员,其保护成员就会变成派生类的保护成员,其私有成员不能继承19.一个函数功能不太复杂但要求被频繁调用,应定义为内联函数;20.抽象类只能作为基类使用,而不能声明它的对象;21.构造函数可以重载,析构函数不可以重载;22.静态成员函数没有this指针;23.类有两个特殊的成员函数构造函数和析构函数;24.在表达式x+yz中,+是作为成员函数重载的运算符,是作为非成员函数重载的运算符;其中operator+有一个参数,operator有两个参数;25.一个派生类只有一个基类的情况称为单继承,而有多个直接基类的情况称为多继承;26.调用析构函数的次序正好与调用构造函数的次序相反;27. 非成员函数应说明为类的友元函数才能访问这个类的private成员;28. 通过使用new和delete两个运算符进行的分配为动态存储分配;29.如果类B继承了类A,则称类A为类B的基类,类B称为类A的派生类30. 表达式operator+x,y还可以表示为x+y ;31 C++语言中的多态性分为编译时的多态性和运行时的多态性;32将x+yz中的"+"用成员函数重载,""用友元函数重载,应解释为x. operator+operatory,z33如果要把返回值为void的函数A声明为类B的友元函数,则应在类B的定义中加入的语句是friend void A ;34派生类的成员一般分为两部分,一部分是从基类继承的成员,另一部分是自己定义的新成员;35继承的方式有公有继承、私有继承和保护继承3种;。
类和对象(一)知识点: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<<”Construc tor1 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);}。