面相面向对象程序语言序

面向过程程序设计和面向对象程序设计的区别和联系分别是什么_百度作业帮
面向过程程序设计和面向对象程序设计的区别和联系分别是什么
面向过程程序设计和面向对象程序设计的区别和联系分别是什么
区别: 面向对象 注重对数据的使用。试图把数据和对其的操作封装在一起(类),并且尝试去自动处理一些不同的函数的调用工作(多态,重载等),以减轻对函数的依赖。面向过程 则注重对函数(功能模块)的应用,这些年也有一些面向函数的语言开始复苏(如F#)也可以看出,面向的重点不同,也各有领域和优点。 联系:联系其实在不同中就已经可以看到。面向对象只是将数据和函数“打包”,并记入了一些 自动判断并调用“函数”...
区别和联系?首先你要告诉别人你懂多少?入门级别:面向过程程序,就是走过程,1步1步地完成任务;面向对象程序,就是分配任务给能完成任务的人,至于怎么完成和完成的效果是什么样的,那个的问题不是你关心的问题,你关心的问题是这件事有人做,下一个事件又给谁做。熟手级别:面向过程程序和面向对象程序就是两个不同的编程思维方式。高手级别:都是用来写程序的语言。...
面向过程是以机器(CPU)的执行顺序来思考,而且事无巨细都要程序员操心,相当于教一个菜鸟做事。面向对象更接近人类的思维习惯,很多细节性的东西都隐藏在类和对象之中,程序员可以节省不少的精力,相当于向一个高手下达任务让他自己去完成。本质上来看,面向对象所以来的基础架构(类库)的最底层还是面向过程来实现的。...
面向对象就将具体操作封装起来。对于后来的程序员使用语言编程起到简化的作用,就像使用库函数,你只要递进参数,得到结果就可以了,不需要知道函数是怎么实现的。面向过程的话就是无论什么都要自己考虑。就好像生产一个汽车,面向对象的方法就是生产时先生产好各种组件,工厂只用拼装。而面向过程就要汽车厂重螺帽开始一个部件一个部件的生产。对于程序员编写软件时,面向对象使得我们可以用已经封装好的类去构造软件,如MFC,...程序员应当知道的10个面向对象设计原则
来源:程序员学架构&&&时间: 10:30:07&&&阅读数:
[导读] 面向对象设计原则是OOPS编程的核心, 但我见过的大多数Java程序员热心于像Singleton (单例) 、 Decorator(装饰器)、Observer(观察者) 等设计模式,而没有把足够多的注意力放在学习面向对象的分析和设计上面。学习面向对象编程像“抽象”、“封装”、“多态”、“继承” 等基
面向对象设计原则是OOPS编程的核心, 但我见过的大多数Java程序员热心于像Singleton (单例) 、 Decorator(装饰器)、Observer(观察者) 等设计模式,而没有把足够多的注意力放在学习面向对象的分析和设计上面。学习面向对象编程像&抽象&、&封装&、&多态&、&继承& 等基础知识是重要的,但同时为了创建简洁、模块化的设计,了解这些设计原则也同等重要。我经常看到不同经验水平的java程序员,他们有的不知道这些OOPS 和SOLID设计原则,有的只是不知道一个特定的设计原则会带来怎样的益处,甚至不知道在编码中如何使用这些设计原则。
(设计原则)底线是永远追求高内聚、低耦合的编码或设计。 Apache 和 Sun的开源代码是学习Java和OOPS设计原则的良好范例。它们向我们展示了,设计原则在Java编程中是如何使用的。Java JDK 使用了一些设计原则:BorderFactory类中的工厂模式、Runtime类中的单例模式、java.io 类中的装饰器模式。顺便说一句,如果您真的对Java编码原则感兴趣,请阅读Joshua Bloch 的Effective Java,他编写过Java API。我个人最喜欢的关于面向对象设计模式的是Kathy Sierra的Head First Design Pattern(深入浅出设计模式),以及其它的关于深入浅出面向对象分析和设计。这些书对编写更好的代码有很大帮助,充分利用各种面向对象和SOLID的设计模式。
虽然学习设计模式(原则)最好的方法是现实中的例子和理解违反设计原则带来的不便,本文的宗旨是向那些没有接触过或正处于学习阶段的Java程序员介绍面向对象设计原则。我个人认为OOPS 和SOLID设计原则需要有文章清楚的介绍它们,在此我一定尽力做到这点,但现在请您准备浏览以下设计模式(原则) .
DRY & Don&t repeat yourself
我们第一个面向对象设计原则是:DRY ,从名称可以看出DRY(don&t repeat yourself)意思是不写重复代码,而是抽象成可复用的代码块。如果您有两处以上相同的代码块,请考虑把它们抽象成一个单独的方法;或者您多次使用了硬编码的值,请把它们设置成公共常量。这种面向对象设计原则的优点是易于维护。重要的是不要滥用此原则,重复不是针对代码而是针对功能来说。它的意思是,如果您使用通用代码来验证OrderID和SSN,这并不意味着它们是相同的或者他们今后将保持不变。通过把通用代码用于实现两种不同的功能,或者您把这两种不同的功能密切地联系在一起;当您的OrderID格式改变时,您的SSN验证代码将会中断。所以要当心这种耦合,而且不要把彼此之间没有任何关系却类似的代码组合在一起。
封装经常修改的代码
在软件领域永远不变的是&变化&,所以把您认为或怀疑将来要被修改的代码封装起来。这种面向对象设计模式的优点是:易于测试和维护恰当封装的代码。如果您在用Java编程,那么请遵守以下原则:变量和方法的访问权限默认设置为私有,并且逐步放开它们的访问权限,例如从&private&到&protected &、&not public&。Java中的一些设计模式使用了封装,工厂设计模式就是一个例子,它封装了创建对象的代码而且提供了以下灵活性:后续生成新对象不影响现有的代码。
打开/关闭设计原则
OpenClosed Design Principle
类、方法/函数应当是对扩展(新功能)开放,对修改闭合。这是另外一个优雅的SOLID 设计原则,以防止有人修改通过测试的代码。理想情况下假如您添加了新功能,那么您的代码要经过测试,这就是打开/关闭设计原则的目标。顺便说一句,SOLID中的字母&O&指的是打开/关闭设计原则。
单一职责原则
Single Responsibility Principle(SRP)
单一职责原则是另外一个SOLID设计原则,SOLID中的字母&S&指的就是它。按照SRP,一个类修改的原因应当有且只有一个,或者一个类应当总是实现单一功能。如果您在Java中的一个类实现了多个功能,那么这些功能之间便产生了耦合关系;如果您修改其中的一个功能,您有可能就打破了这种耦合关系,那么就要进行另一轮测试以避免产生新的问题。
依赖注入/反转原则
Dependency Injection or Inversion principle
不要问框架的依赖注入功能将会给你带来什么益处,依赖注入功能在spring框架里已经很好的得到了实现,这一设计原则的优雅之处在于:DI框架注入的任何一个类都易于用模拟对象进行测试,并且更易于维护,因为创建对象的代码在框架里是集中的而且和客户端代码是隔离的。有多种方法可以实现依赖注入,例如使用字节码工具,其中一些AOP(面向切面编程)框架如切入点表达式或者spring里使用的代理。想对这种SOLID设计原则了解更多,请看IOC 和 DI设计模式中的例子。 SOLID中的字母&D&指的就是这种设计原则。
优先使用组合而非继承
Favor Composition over Inheritance
如果可以的话,要优先使用组合而非继承。你们中的一些人可能为此争论,但我发现组合比继承更有灵活性。组合允许在运行时通过设置属性修改一个类的行为,通过使用多态即以接口的形式实现类之间的组合关系,并且为修改组合关系提供了灵活性。甚至 Effective Java也建议优先使用组合而非继承。
里氏替换原则
Liskov Substitution Principle LSP
根据里氏替换原则,父类出现的地方可以用子类来替换,例如父类的方法或函数被子类对象替换应该没有任何问题。LSP和单一职责原则、接口隔离原则密切相关。如果一个父类的功能比其子类还要多,那么它可能不支持这一功能,而且也违反了LSP设计原则。为了遵循 LSP SOLID设计原则,派生类或子类(相对父类比较)必须增强功能,而非减少。SOLID中的字母&L&指的就是 LSP设计原则。
接口隔离原则
接口隔离原则指,如果不需要一个接口的功能,那么就不要实现此接口。这大多在以下情况发生:一个接口包含多种功能,而实现类只需要其中一种功能。接口设计是一种棘手的工作,因为一旦发布了接口,您就不能修改它否则会影响实现该接口的类。在Java中这种设计原则的另一个好处是:接口有一个特点,任何类使用它之前都要实现该接口所有的方法,所以使用功能单一的接口意味着实现更少的方法。
编程以接口(而非实现对象)为中心
编程总是以接口(而非实现对象)为中心,这会使代码的结构灵活,而且任何一个新的接口实现对象都能兼容现有代码结构。所以在Java中,变量、方法返回值、方法参数的数据类型请使用接口。这是许多Java程序员的建议, Effective Java 以及 head first design pattern 等书也这样建议。
不要期望一个类完成所有的功能,可以适当地把一些功能交给代理类实现。代理原则的典范是:Java 中的equals() 和 hashCode() 方法。为了比较两个对象的内容是否相同,我们让用于比较的类本身完成对比工作而非它们的调用方。这种设计原则的好处是:没有重复编码而且很容易修改类的行为。
以上所有面向对象的设计原则可以帮助您写出灵活、优雅的代码:具有高内聚低耦合的代码结构。理论只是第一步,更重要的是我们要习得一种能力去发现什么时候使用这些设计原则。去发现我们是否违反了什么设计原则和影响了代码的灵活性,但是世界上没有什么是完美的,我们解决问题时不能总去使用设计模式和设计原则,它们大多用于有较长维护周期的大型企业项目。
手机扫描下方二维码,关注php100官方微信。
同步官网每日更新,为您带来随时随地的资讯与技术信息。更有不定期的互动抽奖活动,赢取实用贴心的小礼物。
除非特别声明,PHP100新闻均为原创或投稿报道,转载请注明作者及原文链接原文地址:
延伸阅读 More
haowubai&&
视频教程 Video
网站服务:
会员问题 :
友情链接 :
网站投稿 :
@php100官方
php100官方微信
Copyright (C) 2007-, All Rights Reserved 版权所有 京ICP备号-14
请关注php100官方微信子社区信息(必填)
子社区名称
子社区描述(最多限制在50个字符)
申请人信息(必填)
申请信息已提交审核,请注意查收邮件,我们会尽快给您反馈。
如有疑问,请联系
王垠11月9日在自己的英文博客上发表了一篇文章(无法直接访问),阐述了他对面向对象编程和函数式编程的看法,在Hacker News上引起很多,一度排到了榜首。
感谢外刊IT评论的。如果谁能把Hacker News上主要的反对意见也翻译出来,就更完美了。
之前他的中文博客有一篇中文文章,其实讲的意思类似,可能还深入一些,无需梯子,可以直接阅读。
此文他虽然将面向对象和函数式并列,看上去似乎各打五十大板,但对面向对象的批评比较简单,就是面向对象总是要实现万事万物皆对象的理念,所以对函数的实现比较致命,函数无法作为数据来传递,所以需要各种各样的设计模式来弥补。
文章的重点其实是批评纯函数式语言。所以主要的反对意见来自Haskell阵营。
刚才找梯子去查看了一下王垠的博客,发现他已经把原文删掉,而是在原文URL上贴了一篇回应Haskell阵营批评的文字。他将原文中关于面向对象的批评部分去掉,另外发表了一篇新的文章。
回应文字中的主要观点是,这些Haskell狂热同学的批评都不在点上,因为与已经从事函数式语言实现相关工作较多的王垠相比,他们更多是使用者,对函数式语言的理解太浅了。事实上,王垠当年和他们一样,也是Haskell的铁杆粉丝,信仰monad和纯函数式语言能够拯救世界,而且为此付出惨痛代价。他甚至因此与自己在康奈尔大学的教授争论,并最终离开了康奈尔……(相关故事请读。)
王垠之后转投到印第安纳大学的门下,有机会与(The Little Schemer系列经典书的作者)和Kent Dybvig等最好的函数式语言学者交流。他认为,这些人对函数式语言的理解比Haskell的创造者们(我猜应该以Simon Peyton Jones为首)还要深。比如lazy evaluation其实是Friedman 1976年发明的,他在类型系统上的造诣颇深,但在Scheme的设计里,并没有这些东西。
王垠评论说,函数式语言的程序员不要老是觉得自己掌握了真理,有什么魔法,其实没有。正如他在Cornell的教授所说,任何编程语言中都没有什么魔法或者万灵丹药,使其使用者成为好的程序员。
他还认为,相比之下面向对象的程序员现在越来越不那么热衷于门派之争,至少他们忙于解决现实问题,而非语言自己的困难。
对函数式语言不熟悉(比如不知道monad为何物)的同学,阅读此文及其相关讨论可能有些费劲。但王垠文章最后的一段话值得所有搞技术的同学思考:
无论任何事情,当走向极端时都是有害的。极端化时,面向对象编程和函数式编程都试图把整个世界装入它们的特有模型中,但这个世界是在完全不依赖我们的大脑思考的情况下运转的。如果以为你有一个锤子,就把所有东西都当成钉子,这明显是不对的。只有通过认清我们的真实世界,才能摆脱信仰对我们的束缚。
不要让世界适应你的模型。让你的模型适应世界。
CSDN App随时随地看头条!按城市搜索对象
关于面向对象
面向对象是一个专门为IT单身男女服务的征婚传播平台。2012年,新浪微博
无意中通过微博帮一位单身女生找到中意的男友,之后便一发不可收拾,不断地通过新浪微博的微刊发布了近百名找IT技术男的单身女生信息,脱单成功率超过了10%!可惜的是,新浪微博的微刊产品下线,面向对象征友活动被迫停止。在大家的呼声下,我们选择了一个特别的日子里,日,上线了这个特别的频道,同时保留了那个通过投票选出的特别名号:面向对象!既有相亲的意思,其实又代表一种编程方法。面向对象作为伯乐在线的一个频道,通过这里发布的征友信息,可以传播到数百万的微博微信粉丝和网站读者,这其中会有你将来的另一半吗?你在期待,我们也在期待!参与说明
关于面向对象
面向对象是一个专门为IT单身男女服务的征婚传播平台。2012年,新浪微博 @程序员的那些事 无意中通过微博帮一位单身女生找到中意的男友,之后不断地通过新浪微博的微刊发布了近百名找IT技术男的单身女生信息,脱单成功率超过了10%!
通过面向对象发布的征友信息,可以传播到数百万的微博、微信粉丝和网站读者,这其中会有你将来的另一半吗?你在期待,我们也在期待!
新浪微博:
推荐微信号
(加好友请注明来意)
- 好的话题、有启发的回复、值得信赖的圈子
- 分享和发现有价值的内容与观点
- 为IT单身男女服务的征婚传播平台
- 优秀的工具资源导航
- 翻译传播优秀的外文文章
- 国内外的精选博客文章
- UI,网页,交互和用户体验
- 专注iOS技术分享
- 专注Android技术分享
- JavaScript, HTML5, CSS
- 专注Java技术分享
- 专注Python技术分享
& 2015 伯乐在线
赞助云主机2013秋浙江大学《面向对象程序设计》在线作业_浙江大学_奥鹏作业_布谷鸟爱学习网
浙江大学2013秋浙江大学《面向对象程序设计》在线作业时间: 21:47:00&&作者:不详&&来源:网络&&查看:623&&评论:0内容摘要:浙大2013年下半学期面向对象程序设计在线作业
您的本次作业分数为:100分 &单选题 &
1.下面有关析构函数特征的描述中,正确的是( )。
• A 一个类中可以定义多个析构函数
• B 析构函数名与类名完全相同
• C 析构函数不能指定返回类型
• D 析构函数可以有一个或多个参数
正确答案:C
2.派生类中虚函数原型的( )。
• A 函数类型可以与基类中虚函数的原型不同
• B 参数个数可以与基类中虚函数的原型不同
• C 参数类型可以与基类中虚函数的原型不同
• D 以上都不对
正确答案:D
3.类和派生类正确的关系是( )。
• A 从基类到派生类称为继承。
• B 从派生类到基类称为派生。
• C 派生类包含了基类。
• D 从基类到派生类称为派生。
正确答案:D
4.析构函数的特征是( )。
• A 析构函数可以有多个参数。
• B 析构函数只能在类体内定义。
• C 一个类中只能定义一个析构函数。
• D 一个类中能定义多个析构函数。
正确答案:C
5.如果在基类中将show声明为不带返回值的纯虚函数,正确的写法是( )。
• A virtualshow()=0;
• B virtualvoidshow();
• C virtualvoidshow()=0;
• D voidshow()=0virtual;
正确答案:C
6.若有定义char *words[]={"FORTRAN", "BASIC","PASCAL","JAVA","C"}; 则输出结果为AVA的语句是( )。
• A printf("%s",*words[3]+1)
• B printf("%s",*words[4]+1)
• C printf("%s",*(words+3)+1)
• D printf("%s",(*words+4)+1)
正确答案:C
7.已知有预编译指令#define s(a,b) (a*b),则执行语句i=1;Area=s(3, 5-i)+3;后,变量area的值为( )。
• A 14
• B 15
• C 16
• D 17
正确答案:D
8.抽象类论述中,不正确的是( )。
• A 如果一个类至少有一个纯虚函数,那么该类为抽象类。
• B 抽象类只能用作其他类的基类,不能建立抽象类对象。
• C 抽象类可以用来定义指针。
• D 抽象类可以作为某个函数的返回类型。
正确答案:D
9.下列条件语句中,功能与其他语句不同的是( )。
• A if(a)printf("%d\n",x);elseprintf("%d\n",y)
• B if(a==0)printf("%d\n",y);elseprintf("%d\n",x)
• C if(a!=0)printf("%d\n",x);elseprintf("%d\n",y)
• D if(a==0)printf("%d\n",x);elseprintf("%d\n",y)
正确答案:D
10.类的友元可以访问该类的( )。
• A 只能是数据成员
• B 所有成员
• C 只能是成员函数
• D 只能是公有成员
正确答案:B
11.面向对象的程序设计中,定义类时保留字是用( )。
• A type
• B class
• C private
• D public
正确答案:D
12.置虚基类的目的是( )。
• A 简化程序
• B 消除二义性
• C 提高运行效率
• D 减少目标代码
正确答案:B
13.表示year为闰年的c语言表达式为( )。
• A (year%4==0&&year%100?!=0)&&(year%400==0)
• B (year%4==0&&year%100?!=0)||(year%400==0)
• C (year%4==0)&&(year%400==0)
• D (year%4==0)||(year%400==0)
正确答案:B
14.下列描述中,( )是错误的。
• A 内联函数主要解决程序的运行效率问题
• B 内联函数的定义必须出现在内联函数第一次被调用之前
• C 内联函数中可以包括各种语句
• D 对内联函数不可以进行异常接口声明
正确答案:C
15.下面有关静态成员函数的描述中,正确的是( )。
• A 在静态成员函数中可以使用this指针
• B 在建立对象前,就可以为静态数据成员赋值
• C 静态成员函数在类外定义时,要用static前缀
• D 静态成员函数只能在类外定义
正确答案:B
16.声明类时,下面的说法正确的是( )。
• A 可以在类的声明中给数据成员赋初值
• B 数据成员的数据类型可以是registe
• C private、public、protected可以按任意顺序出现
• D 没有用private、public、protected定义的数据成员是公有成员
正确答案:C
17.C++进行文件操作时需要包含的文件是( ):
• A fstream、h
• B iostream、h
• C stdio、h
• D math、h
正确答案:A
18.下列表达式中,不正确的表达式是( )。
• A a=1,b=1
• B y=int(x)
• C a=b=5
• D i++
正确答案:B
19.关于虚函数,正确的描述是( )。
• A 构造函数不能是虚函数
• B 析构函数不能是虚函数
• C 虚函数可以是友元函数
• D 虚函数可以是静态成员函数
正确答案:A
20.关于delete运算符的下列描述中,( )是错误的。
• A 它必须用于new返回的指针
• B 使用它删除对象时要调用析构函数
• C 对一个指针可以使用多次该运算符
• D 指针名前只有一对方括号符号,不管所删除数组的维数
正确答案:C
21.下面有关重载函数的说法中正确的是( )。
• A 重载函数必须具有不同的返回值类型
• B 重载函数形参个数必须不同
• C 重载函数必须有不同的形参列表
• D 重载函数名可以不同
正确答案:C
22.关于虚函数的下列描述中,正确的是( )。
• A 在基类中被关键字virtual说明,并在派生类重新定义的函数。
• B 在派生类重新定义函数时,用关键字virtual说明。
• C 在派生类前用关键字virtual说明。
• D 在派生类重新定义虚函数时,要求与基类的虚函数可具有不同的函数名。
正确答案:A
23.对象是现实世界中的一个实体,不是其特性的是( )。
• A 必须有一个关键字,以示区别。
• B 每个对象必须有一个名字。
• C 有属性。
• D 有操作。
正确答案:A
24.定义作运算符重载函数的是( )。
• A 构造函数
• B 析构函数
• C 主函数。
• D 类以外的函数
正确答案:D
25.执行下列程序段后, int *p,A = 10,B=1;p = &b;A =a + (*p)++ ;变量a,b的值为:( )。
• A a=10,b=1
• B a=10,b=2
• C a=11,b=1
• D a=11,b=2
正确答案:D
26.下列的各种函数中,是本类的成员函数( )。
• A 构造函数
• B 拷贝构造函数
• C 友元函数
• D 缺省参数的构造函数
正确答案:C
27.元的作用之一是( )。
• A 提高程序的运行效率
• B 加强类的封装性
• C 实现数据的隐藏性
• D 增加成员函数的种类
正确答案:A
28.现实世界中的对象,以下不是它的特性的是( )。
• A 每一个必须有一个名字以区别于其他对象;
• B 用属性来描述对象的某些特征;
• C 有一组操作,每组操作决定对象的一种行为;
• D 有一关键字class
正确答案:D
29.类成员在派生类中的访问属性描述中,正确的是( )。
• A 无论哪种派生,基类的公有成员不允许派生类的成员函数访问。
• B 无论哪种派生,基类的保护成员不允许派生类的成员函数访问。
• C 无论哪种派生,基类的私有成员允许派生类的成员函数访问。
• D 无论哪种派生,基类的保护成员允许派生类的成员函数访问。
正确答案:D
30.执行x=-1; do { x=x*x; } while (!x); 循环时,下列说法正确的是( )。
• A 循环体将执行一次
• B 循环体将执行两次
• C 循环体将执行无限次
• D 系统将提示有语法错误
正确答案:A
31.通过基类指针或引用来访问基类和派生类中的同名函数,才考虑虚函数。正确的论述是( )。
• A 虚函数是在基类中用virtual说明,派生类中重新定义的函数。
• B 虚函数是一个static类型的成员函数。
• C 虚函数是一个非成员函数。
• D 派生类的虚函数与基类的虚函数具有不同的参数个数和类型。
正确答案:A
32.关于成员函数特征的下述描述,不正确的是( )。
• A 成员函数一定要在类内定义。
• B 成员函数可以重载。
• C 成员函数可以设置参数的默认值。
• D 可在类内定义。
正确答案:A
33.下面的类型声明中正确是( )。
• A int&a[4];
• B int&*p;
• C int&&q;
• D inti,*p=&i;
正确答案:D
34.下面有关对构造函数的描述中,正确的是( )。
• A 构造函数可以带有返回值
• B 构造函数的名字与类名完全相同
• C 构造函数必须带有参数
• D 构造函数必须定义,不能默认
正确答案:B
35.以下各语句或语句组中,正确的操作是( )。
• A chars[6]="123456";
• B char*s;s="123456";
• C char*s;gets(s);
• D chars[6];scanf("%s",&s);
正确答案:B
36.面向对象的多态性正确的说法是( )。
• A 不同名字的函数定义相同功能。
• B 同一种运算符定义不同的操作。
• C 函数不允许同名。
• D 派生类中不可出现与基类同名的函数。
正确答案:B
37.于成员函数的说法,不正确的是( )。
• A 成员函数可以是内置函数。
• B 成员函数可以在类内先声明,再在类外定义完整。
• C 成员函数可以设置参数的默认值。
• D 成员函数一定要在类内定义完整。
正确答案:D
38.重载函数在调用时选择的依据中,( )是错误的。
• A 函数名字
• B 函数的返回类型
• C 参数个数
• D 参数的类型
正确答案:B
39.打开磁盘文件的打开方式中,以写方式打开文件为( )。
• A ios::ate
• B ios::out
• C ios::in
• D ios::app
正确答案:B
40.个基类可以派生出二个派生类,这种继承关系称为( )。
• A 多继承
• B 多重继承
• C 单继承
• D 双重继承
正确答案:C
41.若定义intA[2][3]={1,2,3,4,5,6}; 则值为4的数组元素是( )。
• A a[1][0]
• B a[1][1]
• C a[2][0]
• D a[2][1]
正确答案:A
42.与数学式子对应的C语言表达式是( )。
• A 3*x^n/(2*x-1)
• B 3*x*n/(2*x-1)
• C 3*pow(x,n)/(2*x-1)
• D 3*pow(n,x)/(2*x-1)
正确答案:C
43.是面向对象系统的特性是( )。
• A 封装性、继承性、多态性
• B 封装性、继承性、保密性
• C 封装性、继承性、重载性
• D 完整性、继承性、多态性
正确答案:A
44.派生类的对象对它的基类成员中,可以访问的是( )。
• A 公有继承的公有成员。
• B 公有继承的保护成员。
• C 公有继承的私有成员。
• D 公有继承的所有成员。
正确答案:A
45.设已经定义好了一个类student,现在要定义类derived,它是从student私有派生的,定义类derived的正确写法是( )。
• A clasederived::studentprivate{…};
• B clasederived::studentpublic{…};
• C clasederived::privatestudent{…};
• D clasederived::publicstudent{…};
正确答案:C
46.在C程序中,“e2”可以是( )。
• A 实型常数100
• B 值为100的整型常数
• C 非法标识符
• D 合法标识符
正确答案:D
47.以下叙述中不正确的是( )。
• A 在不同的函数中可以使用相同名字的变量
• B 函数中的形式参数是局部变量
• C 在一个函数内定义的变量只在本函数范围内有效
• D 在一个函数内的复合语句中定义的变量在本函数范围内有效
正确答案:D
48.类和派生类的相互关系不正确的是( )。
• A 从基类到派生类称为派生。
• B 派生类还可以再作为另一派生类的基类。
• C 从派生类到基类称为派生。
• D 从派生类到基类称为继承。
正确答案:C
49.下列的各函数中,是成员函数的是( )。
• A 主函数
• B 返回对象的函数
• C 默认参数的构造函数
• D 友元函数
正确答案:C
50.打开磁盘文件的打开方式中,以读方式打开文件为( )。
• A ios::ate
• B ios::out
• C ios::in
• D ios::app
正确答案:C
51.如果定义并初始化一个数组 int s[10]={1,2,3,4,5,6,7,8,9,10}; 则执行printf("%d\n",a[a[1]*a[2]])语句后的输出结果是( )。
• A 3
• B 4
• C 7
• D 2
正确答案:C
52.造函数是在( )时被执行的。
• A 程序编译
• B 创建对象
• C 创建类
• D 程序装人内存
正确答案:B
53.假设已经有定义“constChar *Const name="chen";”下面的语句中正确的是( )。
• A name[3]='a';
• B name=
• C name=newChar[5];
• D cout&&NAME[3];
正确答案:D
54.定义类,再用类定义对象是( )。
• A 结构化程序设计的主要特点。
• B C语言的主要特点。
• C 面向过程的程序设计的主要特点
• D 面向对象程序设计的主要特点。
正确答案:D
55.是构造函数的特征是( )。
• A 构造函数不可以有形式参数。
• B 在创建对象时被执行。
• C 构造函数与类不同名。
• D 构造函数必须说明返回类型。
正确答案:B
56.对虚基类的论述,正确的是( )。
• A 定义基类时加virtual。
• B 定义派生类时,在基类名前加virtual。
• C 成员函数前加virtual。
• D 在派生类名前加virtual。
正确答案:B
57.一个派生类有多个父类,而这多个父类又有一个共同基类,这种情况,才考虑设置虚基类,目的是( )。
• A 消除二义性。
• B 简化程序。
• C 提高运行效率。
• D 减少目标代码。
正确答案:A
58.先定义类,再用类定义对象、对象数组、对象指针是( )。
• A 结构化程序设计的主要特点。
• B C语言的主要特点。
• C 面向过程的程序设计的主要特点。
• D 面向对象程序设计的主要特点。
正确答案:D
59.的概念是( )。
• A 所有对象的集合。
• B 同一类记录的集合。
• C 同一类数据的集合。
• D 对一组具有共同的属性特征和行为特征的对象的抽象。
正确答案:D
60.下列语句中错误的是( )。
• A int*p=newint(10);
• B int*p=newint[10];
• C int*p=newint;
• D int*p=newint[40](0);
正确答案:D
61.在( )情况下适宜采用内联函数。
• A 函数代码小,频繁调用
• B 函数代码多,频繁调用
• C 函数体含有递归语句
• D 函数体含有循环语句
正确答案:A
62.C++中,类和对象之间的关系是( )。
• A 结构类型和结构体的关系。
• B 定义和被定义的关系。
• C 调用和被调用的关系。
• D 型和值的关系。
正确答案:A
63.对象是现实世界中的一个实体,其特性的是( )。
• A 必须有一个关键字,以示区别。
• B 每个对象都有对象标识名。
• C 只有数据属性。
• D 只有操作函数。
正确答案:B
64.多继承构造函数定义中,几个基类构造函数用( )分隔。
• A :
• B ;
• C ,
• D ::
正确答案:C
65.在友元函数的下面说法中,正确的是( )。
• A 友元函数是独立于当前类的外部函数。
• B 一个友元函数不能同时定义为两个类的友元函数
• C 友元函数必须在类的外部定义。
• D 在外部定义友元函数时,必须加friend
正确答案:A
66.面向对象(O-O)程序设计是一种新的程序设计范型。这种范型的主要特征是( )。
• A 程序=对象+消息
• B 程序=函数+调用
• C 程序=算法+数据
• D 程序=过程+调用
正确答案:A
67.生类析构函数的执行顺序正确的是( )。
• A 先执行基类的析构函数,再执行派生类的析构函数。
• B 先执行派生类的析构函数,再执行基类的析构函数。
• C 基类析构函数执行总是在先。
• D 以上都不是。
正确答案:B
68.面向对象的多态性正确的是( )。
• A 不同名字的函数定义相同功能。
• B 同一种运算符定义不同的操作。
• C 函数不允许同名。
• D 派生类中不能出现与基类同名的函数。
正确答案:B
69.还可定义作运算符重载函数的是( )。
• A 类以外的函数
• B 构造函数
• C 析构函数
• D 主函数。
正确答案:A
70.在C程序中,如果有FILE *fp;则对于文件指针fp,下面说法正确的是( )。
• A fp是文件读写位置
• B 可以用一个fp同时对多个文件缓冲区操作
• C fp是用以描述文件缓冲区信息的结构的指针
• D 当对文件进行读写操作时,fp也跟着移动
正确答案:C
71.个基类可以派生出一个派生类,该派生类再派生出一个派生类,这种继承关系称为( )。
• A 多继承
• B 多重继承
• C 双重继承
• D 单继承
正确答案:D
72.假设已经有定义“char *Const name="chen";”下面的语句中正确的是( )。
• A name[3]='q';
• B name=
• C name=newChar[5];
• D name=newChar('q');
正确答案:A
73.关于抽象类的下列描述中,正确的是( )。
• A 如果一个类至少有一个纯虚函数,那么该类为抽象类。
• B 抽象类能用作其他类的基类,还能定义抽象类对象。
• C 抽象类中不能再定义普通成员函数。
• D 抽象类可以作为函数的参数类型。
正确答案:A
74.在面向对象的程序设计C++中,当用cin、cout输入、输出时程序头部要( )。
• A #include&stdio.h&
• B #include&iostream.h&
• C #include&stdli
正确答案:B
75.不可定义作运算符重载函数的是( )。
• A 类以外的函数
• B 成员函数
• C 构造函数
• D 友员函数。
正确答案:C
76.关于new运算符的下列描述中,( )是错误的。
• A 它可以用来动态创建对象和对象数组
• B 使用它创建的对象或对象数组可以使用运算符delete删除
• C 使用它创建对象时要调用构造函数
• D 使用它创建对象数组时必须指定初始值
正确答案:D
77.打开磁盘文件的打开方式中,不能使用的是( )。
• A ios::both
• B ios::app
• C ios::int
• D ios::out
正确答案:A
78.生类构造函数的执行顺序正确的是( )。
• A 先执行基类的构造函数,再执行派生类的构造函数。
• B 先执行派生类的构造函数,再执行基类的构造函数。
• C 先执行派生类构造函数的函数体,再执行基类构造函数的函数体。
• D 以上都不是。
正确答案:A
79.下面有关友元函数的描述中,正确的说法是( )。
• A 友元函数是独立于当前类的外部函数
• B 一个友元函数不能同时定义为两个类的友元函数
• C 友元函数必须在类的外部定义
• D 在外部定义友元函数时,必须加关键字friend
正确答案:A
80.类和派生类的相互关系正确的是( )。
• A 从基类到派生类称为派生。
• B 从基类到派生类称为继承。
• C 从派生类到基类称为派生。
• D 派生类包含了基类。
正确答案:A
81.关于抽象类的下列描述中,错误的是( )。
• A 如果一个类至少有一个纯虚函数,那么该类为抽象类。
• B 抽象类只能用作其他类的基类,不能建立抽象类对象。
• C 抽象类可以用来定义指针。
• D 抽象类可以作为函数的参数类型。
正确答案:D
82.类的友元允许访问该类的( )。
• A 只能是数据成员
• B 私有成员
• C 只能是成员函数
• D 只能是公有成员
正确答案:B
83.能用友元函数重载的运算符是( )。
• A +
• B =
• C []
• D -&
正确答案:A
84.下列的各函数中,不是成员函数的是( )。
• A 构造函数
• B 拷贝构造函数
• C 默认参数的构造函数
• D 友元函数
正确答案:D
85.类成员在派生类中的访问属性描述中,错误的是( )。
• A 无论哪种派生,基类的公有成员允许派生类的成员函数访问。
• B 无论哪种派生,基类的保护成员允许派生类的成员函数访问。
• C 无论哪种派生,基类的私有成员不允许派生类的成员函数访问。
• D 无论哪种派生,基类的保护成员不允许派生类的成员函数访问。
正确答案:D
86.不是面向对象系统的特性是( )。
• A 封装性
• B 继承性
• C 保密性
• D 多态性
正确答案:C
87.不是析构函数的特征是( )。
• A 析构函数可以有多个参数。
• B 析构函数是成员函数。
• C 一个类中只能定义一个析构函数。
• D 析构函数不能有参数。
正确答案:A
88.下列关于纯虚函数与抽象类的描述中,错误的是( )。
• A 纯虚函数是一种特殊的函数,它允许没有具体的实现
• B 抽象类是指具有纯虚函数的类
• C 一个基类的说明中有纯虚函数,该基类的派生类一定不再是抽象类
• D 抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出
正确答案:C
89.有关运算符重载正确的描述是( )。
• A C++语言允许在重载运算符时改变运算符的操作个数
• B C++语言允许在重载运算符时改变运算符的优先级
• C C++语言允许在重载运算符时改变运算符的结合性
• D C++语言允许在重载运算符时改变运算符原来的功能
正确答案:D
90.C++程序中函数原型(函数声明)错误的写法是( )。
• A intAdd(intA,intB);
• B intAdd(int,int);
• C intAdd(intA,B);
• D intAdd(intA,int);
正确答案:C
91.下列属于合法的C语言赋值语句的是( )。
• A a=b=58
• B i++
• C a=58,b=58
• D k=int(a+b)
正确答案:A
92.也可定义作运算符重载函数的是( )。
• A 构造函数
• B 析构函数
• C 成员函数
• D 主函数。
正确答案:C
93.对虚基类正确的论述正确的是( )。
• A 定义基类时加virtual。
• B 成员函数前加virtual。
• C 在派生类名前加virtual。
• D 定义派生类时,在基类名前加virtual。
正确答案:D
94.是构造函数的特征是( )。
• A 构造函数不能与类同名。
• B 构造函数必须说明返回类型。
• C 构造函数可以有形式参数。
• D 程序中必须有调用构造函数的语句。
正确答案:C
95.设有以下说明语句,则下面的叙述中不正确的是( )。struct XYZ {int x ; float y;Char z ;} xyz;
• A x,y,z都是结构成员名
• B structXYZ是结构类型名
• C struct是定义结构类型的关键字
• D XYZ是结构类型名
正确答案:D
96.在C++中,关于下列设置默认参数值的描述中,( )是正确的。
• A 不允许设置默认参数值
• B 在指定了默认值的参数右边,不能出现没有指定默认值的参数
• C 只能在函数的定义性声明中指定参数的默认值
• D 设置默认参数值时,必须全部都设置
正确答案:B
97.用派中类的主要原因是( )。
• A 提高代码的可重用性
• B 提高程序的运行效率
• C 加强类的封装性
• D 实现数据的隐藏
正确答案:A
98.下列选项中,当 x 为大于1 的奇数时,值为 0 的表达式是( )。
• A x%2==1
• B x%2==0
• C x%2!=0
• D x/2
正确答案:B
99.表达式:36.5-(12+7%4)/2.0的运算结果是( )类型。
• A double
• B int
• C float
• D char
正确答案:A
100.假设已经有定义“constChar * name="chen";”下面的语句中错误的是( )。
• A name[3]='q';
• B name=
• C name=newChar[5];
• D name=newChar('q');
正确答案:A
101.关于成员函数特征的下述描述,正确的是( )。
• A 成员函数一定是内置函数。
• B 成员函数一定要在类外定义完整。
• C 成员函数可以设置参数的默认值。
• D 成员函数一定要在类内定义完整。
正确答案:C
102.不是构造函数的特征是( )。
• A 构造函数与类同名。
• B 构造函数必须说明返回类型。
• C 构造函数可以有形式参数。
• D 编译系统会自动调用构造函数。
正确答案:B
103.一个基类可以派生出二个派生类,这种继承关系还是称为( )。
• A 多继承
• B 单继承
• C 多重继承
• D 双重继承
正确答案:B
104.charA[10] = "abcde",B[8]= "fghi"; strcpy(a+3,b+1); printf("%d ",strlen(a) ); 执行下面程序后的输出结果为( )。
• A 5
• B 6
• C 9
• D 10
正确答案:B
标签:&&上一篇:下一篇:相关评论评论者:&&&&&&验证码:&&点击获取验证码本类更新
&-&&-&&-&Powered by

我要回帖

更多关于 面向对象程序设计教程 的文章

 

随机推荐