
《面向对象程序设计》第03章在线测试
剩余时间:
57:18
答题须知:1、本卷满分20分。
2、答完题后,请一定要单击下面的“交卷”按钮交卷,否则无法记录本试卷的成绩。
3、在交卷之前,不要刷新本网页,否则你的答题结果将会被清空。
第一题、单项选择题(每题1分,5道题共5分)
1、假定AA为一个类,a为该类公有的数据成员,若要在该类的一个成员函数中访问它,则书写格式为(A )。
A、a B、AA::a
C、a() D、AA::a()
2、在关键字public后面定义的成员为类的(B )成员。
A、私有 B、公用
C、保护 D、任何
3、假定 ab 为一个类,则执行 ab x ;语句时将自动调用该类的 ( B) 。
A、有参构造函数 B、无参构造函数
C、拷贝构造函数 D、赋值构造函数
4、一段程序的定义如下,在函数f()中将动态对象的成员n的值改为34的语句应该为 ( C) class A { int n; public: setn(int nl) {n=nl;} A(int x) {n = x; } } int f() {A ptr = new A(45); }
A、An=34; B、ptrsetn(34);
C、ptr->setn(34); D、setn(34);
5、假定AB为一个类,则执行“AB p=new AB(1,2);”语句时共调用该类构造函数的次数为(B )。
A、0 B、1
C、2 D、3
第二题、多项选择题(每题2分,5道题共10分)
1、下列可以作为类的成员的是( ACD)
A、自身类对象的指针
B、自身类对象
C、自身类对象的引用
D、另一个类的对象
2、关于封装,下列说法中正确的是(ABC )。
A、通过封装,对象的全部属性和 *** 作结合在一起,形成一个整体
B、通过封装,一个对象的实现细节被尽可能地隐藏起来(不可见)
C、通过封装,每个对象都成为相对独立的实体
D、通过封装,对象的属性都是不可见的
3、定义析构函数时,错误的说法是 ( ABD) 。
A、其名与类名完全相同
B、返回类型是 void 类型
C、无形参,也不可重载
D、函数体中必须有 del_ete 语句
4、下面关于静态数据成员的说法错误的是(BCD )
A、静态数据成员是类的所有对象所共有的
B、静态数据成员要在构造函数内初始化
C、类的每个对象有自己的静态数据成员
D、静态数据成员不能通过类的对象调用
5、下列描述属于类的成员函数的是(ABD )
A、构造函数
B、析构函数
C、友元函数
D、拷贝构造函数
第三题、判断题(每题1分,5道题共5分)
1、假定AA为一个类,a为该类公有的数据成员,x为该类的一个对象,则访问x对象中数据成员a的格式为x->a。 F
正确 错误
2、对类中引用成员的初始化是通过构造函数中给出的初始化表实现的。T
正确 错误
3、析构函数的作用是在对象被撤销时收回先前分配的内存空间。T
正确 错误
4、使用关键字class 定义的类中缺省的访问权限是私有private的。T
正确 错误
5、当两个对象之间进行复制时,复制完成后这两个对象的内容将完全独立,没有关联。 F
正确 错误
一种程序设计范型,同时也是一种程序开发的方法。对象指的是类的实例。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。
面向对象程序设计可以看作一种在程序中包含各种独立而又互相调用的对象的思想,这与传统的思想刚好相反:传统的程序设计主张将程序看作一系列函数的集合,或者直接就是一系列对电脑下达的指令。
面向对象程序设计中的每一个对象都应该能够接受数据、处理数据并将数据传达给其它对象,因此它们都可以被看作一个小型的“机器”,即对象。
扩展资料
面向对象程序设计的优点:
1、数据抽象的概念可以在保持外部接口不变的情况下改变内部实现,从而减少甚至避免对外界的干扰。
2、通过继承大幅减少冗余的代码,并可以方便地扩展现有代码,提高编码效率,也减低了出错概率,降低软件维护的难度。
3、结合面向对象分析、面向对象设计,允许将问题域中的对象直接映射到程序中,减少软件开发过程中中间环节的转换过程。
4、通过对对象的辨别、划分可以将软件系统分割为若干相对为独立的部分,在一定程度上更便于控制软件复杂度。
5、以对象为中心的设计可以帮助开发人员从静态(属性)和动态(方法)两个方面把握问题,从而更好地实现系统。
6、通过对象的聚合、联合可以在保证封装与抽象的原则下实现对象在内在结构以及外在功能上的扩充,从而实现对象由低到高的升级。
参考资料来源:百度百科-面向对象程序设计
参考资料来源:百度百科-面向对象的程序设计
最简单的例子。#include <iostream>using namespace std;class Time //定义Time类{public : //数据成员为公用的int hour;int minute;int sec;};int main( ){Time t1;//定义t1为Time类对象cin>>t1hour;//输入设定的时间cin>>t1minute;cin>>t1sec;//输出时间:cout<<t1hour<<":"<<t1minute<<":"<<t1sec<<endl;return 0;}
运行情况如下:
1232 43↙
12:32:43
几点注意:
1) 在引用数据成员hour,minute,sec时不要忘记在前面指定对象名。
2) 不要错写为类名,如写成
Timehour,Timeminute,Timesec
是不对的。因为类是一种抽象的数据类型,并不是一个实体,也不占存储空间,而对象是实际存在的实体,是占存储空间的,其数据成员是有值的,可以被引用的。
3) 如果删去主函数的3个输入语句,即不向这些数据成员赋值,则它们的值是不可预知的。
一前言
其实不管是java还是net都是属于面向对象程序设计语言,归根结底,它们都离不开面向对象,所以什么是面向对象呢,意思就是object-oriented将对数据和对数据的 *** 作作为一个相互依赖的关系、不可分割的整体,才用信息隐蔽技术和数据抽象,更简单地解决现实当中的问题!
上面的概念比较抽象,这里涉及到一个类的问题,通俗地说,就是把一个事物抽象出来成为类,而这个类的实例就是对象,类跟对象的关系其实就相当于设计图纸跟实物之间的关系,面向对象其实就是面向于类的!
面向对象的三大特性:封装、继承、多态!
二基本概念
1封装
封装的意思其实很简单:就像你使用优盘一样,优盘被封装在一个盒子里面,你根本不需要知道它是怎么工作的,你只要知道怎么用它就行了,当然用的时候是使用USB接口,对封装的类进行调用的时候也是用特定的接口进行调用的!
2继承
继承是指一个对象从另一个对象中获得属性的过程是面向对象程序设计的三大原则之二,它支持按层次分类的概念例如,波斯猫是猫的一种,猫又是哺乳动物的一种,哺乳动物又是动物的一种如果不使用层次的概念,每个对象需要明确定义各自的全部特征通过层次分类方式,一个对象只需要在它的类中定义是它成为唯一的各个属性,然后从父类中继承它的通用属性因此,正是由于继承机制,才使得一个对象可以成为一个通用类的一个特定实例一个深度继承的子类将继承它在类层次中的每个祖先的所有属性
继承与封装可以互相作用如果一个给定的类封装了某些属性,它的任何子类将会含有同样得属性,另加各个子类所有得属性这是面向对象程序在复杂性上呈线性而非几何增长的一个重要概念新的子类继承其所有祖先的所有属性子类和系统中的其他代码不会产生无法预料的交互作用
3多态
多态是指一个方法只能有一个名称,但可以有许多形态,也就是程序中可以定义多个同名的方法,用"一个接口,多个方法"来描述可以通过方法的参数和类型引用
三封装、继承、多态之间的关系
下面我给你讲一个封装、继承、多态组合起来的例子:
在由封装,继承,多态所组成的环境中,程序员可以编写出比面向过程模型更健壮,更具扩展性的程序经过仔细设计的类层次结构是重用代码的基础封装能让程序员不必修改公有接口的代码即可实现程序的移植多态能使程序员开发出简洁,易懂,易修改的代码例如:汽车
从继承的角度看,驾驶员都依靠继承性来驾驶不同类型(子类)的汽车,无论这辆车是轿车还是卡车,是奔驰牌还是菲亚特牌,驾驶员都能找到方向盘,手刹,换档器经过一段时间驾驶后,都能知道手动档与自动档之间的差别,因为他们实际上都知道这两者的共同超类:传动装置
从封装的角度看,驾驶员总是看到封装好的特性刹车隐藏了许多复杂性,其外观如此简单,用脚就能 *** 作它发动机,手刹,轮胎大小的实现对与刹车类的定义没有影响
从多态的角度看,刹车系统有正锁反锁之分,驾驶员只用脚踩刹车停车,同样的接口可以用来控制若干种不同的实现(正锁或反锁)
这样各个独立的构件才被转换为汽车这个对象的同样,电脑培训认为可以通过使用面向对象的设计原则,程序员可以把一个复杂程序的各个构件组合在一起,形成一个一致,健壮,可维护的程序。
封装:
1定义:隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别。
2封装的目的是:增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,一特定的访问权限来使用类的成员。
3封装的基本要求是:把所有的属性私有化,对每个属性提供getter和setter方法,如果有一个带参的构造函数的话,那一定要写一个不带参的构造函数。在开发的时候经常要对已经编写的类进行测试,所以在有的时候还有重写toString方法,但这不是必须的。
继承:
1目的:实现代码的复用。
2介绍:当两个类具有相同的特征(属性)和行为(方法)时,可以将相同的部分抽取出来放到一个类中作为父类,其它两个类继承这个父类。继承后子类自动拥有了父类的属性和方法,但特别注意的是,父类的私有属性和构造方法并不能被继承。另外子类可以写自己特有的属性和方法,目的是实现功能的扩展,子类也可以复写父类的方法即方法的重写。子类不能继承父类中访问权限为private的成员变量和方法。子类可以重写父类的方法,及命名与父类同名的成员变量。有时候我们需要这样的需求:我们需要将某些事物尽可能地对这个世界隐藏,但是仍然允许子类的成员来访问它们。这个时候就需要使用到protected。
多态:
1概念:相同的事物,调用其相同的方法,参数也相同时,但表现的行为却不同。
2Java实现多态有三个必要条件:继承、重写、向上转型。
继承:在多态中必须存在有继承关系的子类和父类。
重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。
向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才能够具备技能调用父类的方法和子类的方法。
只有满足了上述三个条件,我们才能够在同一个继承结构中使用统一的逻辑实现代码处理不同的对象,从而达到执行不同的行为。
3多态的实现方式:
(1)基于继承实现的多态
基于继承的实现机制主要表现在父类和继承该父类的一个或多个子类对某些方法的重写,多个子类对同一方法的重写可以表现出不同的行为。
(2)基于接口实现的多态
继承是通过重写父类的同一方法的几个不同子类来体现的,那么就可就是通过实现接口并覆盖接口中同一方法的几不同的类体现的。
在接口的多态中,指向接口的引用必须是指定这实现了该接口的一个类的实例程序,在运行时,根据对象引用的实际类型来执行对应的方法。
继承都是单继承,只能为一组相关的类提供一致的服务接口。但是接口可以是多继承多实现,IT培训认为它能够利用一组相关或者不相关的接口进行组合与扩充,能够对外提供一致的服务接口。所以它相对于继承来说有更好的灵活性。
这样的类我以前有写过的,使用了自创的算法,实现了多种 *** 作符重载,非常好用,先贴上头文件
class CDate{
public:
CDate(unsigned int iYear=1900,unsigned int iMonth=1,unsigned int iDay=1);//构造函数
CDate(unsigned int nDays);//构造函数
virtual ~CDate(void);//析构函数
const CDate& operator+(int days);// *** 作符+
const CDate& operator-(int days);// *** 作符-
const int operator-(CDate Date);// *** 作符- (两个日期相减)
const CDate& operator++();//自加
const CDate& operator--();//自减
const CDate& operator+=(int days);//加赋值
const CDate& operator-=(int days);//减赋值
const CDate& operator=(CDate Date);//赋值
const bool operator==(CDate Date);//是否相等
void GetDate(int &iYear,int &iMonth,int &iDay);//取日期
bool SetDate(int iYear,int iMonth,int iDay);//设置日期
int GetBaseDays(void);//返回当前对象的基准天数
bool SetBaseDay(int nDays);//设置基准天数
unsigned int GetDayOfWeek();//获取星期
bool IsLeapYear(int nYear,bool & IsLeap);//判断闰年
unsigned int GetDaysOfMonth(int uYear,unsigned int uMonth);//获取该月总天数
bool ShowCalendar(unsigned int uYear,unsigned int uMonth);//显示月历
void print(void);
private:
bool LTDateCheck(int uYear,unsigned int uMonth,unsigned int uDay);//日期合法性检察
int GetBaseDays(int uYear,unsigned int uMonth,unsigned int uDay);//获取距离基准日期的天数,以1900年1月1日0时为0,负代表早于该时刻,正代表晚于该时刻
bool GetDateFromDays(void);//从距离基准天数的积日换算成日期
private:
unsigned int m_iYear;//年
unsigned int m_iMonth;//月
unsigned int m_iDay;//日
unsigned int m_iDayOfWeek;//星期
int m_nDays;//积日(距离基准日期的天数)
char day[11];
};
重载了 *** 作符 +、-、+=、-=、=、==、++、--。构造函数可以不带参数,不带参数时,默认为1900年1月1日。
本类算法自创,可提供参考,不过,要学好C++,尽量还是要自己思考并动手编写程序。
以上就是关于面向对象程序设计第3章全部的内容,包括:面向对象程序设计第3章、什么是面向对象的程序设计思想、C++面向对象的程序设计等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)