|
|
|
|
移动端

1.16.1 概念(1)

《程序员面试笔试真题与解析》本书针对当前各大 IT企业面试笔试中特性与侧重点,精心挑选了 3年以来近百家典型 IT企业的面试笔试真题,这些企业涉及业务包括系统软件、搜索引擎、电子商务、手机 APP、安全关键软件等,面试笔试真题非常具有代表性与参考性。本节为大家介绍概念。

作者:猿媛之家来源:机械工业出版社|2017-12-06 18:33

年前最后一场技术盛宴 | 1月27日与京东、日志易技术大咖畅聊智能化运维发展趋势!


1.16 面向对象技术

1.16.1  概念(1)

【真题 228】下面有关 C++语言和 Java语言的描述中,错误的是( )。

A.Java是一次编写多处运行, C++是一次编写多处编译

B.C++和 Java支持多继承

C.Java不支持操作符重载,操作符重载被认为是 C++的突出特征

D.Java没有函数指针机制, C++支持函数指针

答案:B。

由于 Java语言不支持多继承。所以,选项 B错误。

【真题 229】以下关于内联函数的描述中,正确的是( )。

A.类的私有成员函数不能作为内联函数

B.在所有类说明中,内部定义的成员函数都是内联函数

C.类的保护成员函数不能作为内联函数

D.使用内联函数的地方会在运行阶段用内联函数体替换掉答案:B。内联函数是指用关键字 inline修饰的函数。在类中定义的函数被默认成内联函数。从源代码层看,

内联函数具有函数的结构,而在编译后,却不具备函数的性质。

内联函数不是在调用时发生控制转移,而是在编译时将函数体嵌入在每一个调用处。因此,选项 B正确,选项 D错误。private、public与 protected类型的成员函数都可以被定义为内联函数,所以,选项 A和选项 C错误。

【真题 230】 C++是否是类型安全的?

答案:不是。

类型之间可以进行强制转换表示类型不安全。 C++语言不是类型安全的,而 Java语言与 C#语言则

是类型安全的。

【真题 231】有如下程序:

  1. #include<iostream> 
  2. using namespace std;  
  3. class MyClass  
  4. {  
  5. public:  
  6. MyClass(int i = 0)  
  7. {  
  8. cout << 1;  
  9. }  
  10. MyClass(const MyClass& x)  
  11. {  
  12. cout << 2;  
  13. }  
  14. MyClass& operator=(const MyClass& x)  
  15. {  
  16. cout << 3;  
  17. return *this;  
  18. }  
  19. ~MyClass()  
  20. {  
  21. cout << 4;  
  22. }  
  23. };  
  24. int main()  
  25. {  
  26. MyClass obj1(1), obj2(2), obj3(obj1);  
  27. return 0;  

执行这个程序的输出结果是()。

A.112444  B.11114444  C.121444  D.11314444

答案:A。

  1. class MyClass  
  2. {  
  3. public:  
  4. MyClass(int i=0){cout<<1;} //定义带一个默认参数的构造函数  
  5. MyClass(const MyClass&x){cout<<2;} //这是复制构造函数,当使用复制初始化对象的时候,会  
  6. 调用这个构造函数来初始化对象  
  7. MyClass&operator=(const MyClass&x){cout<<3;return*this;} //这是重载的赋值操作符,当程序中  
  8. 出现对象赋值(就是使用=)的时候,会调用这个函数  
  9. ~MyClass(){cout<<4;} //这是析构函数,当对象消失时会调用这个函数  
  10. };  
  11. int main()  
  12. {  
  13. //把下面的三个语句分开写,方便解释  
  14. MyClass obj1(1); //调用构造函数MyClass(int i=0)初始化对象obj1,这个函数输出的是1,因此,  
  15. 程序输出1  
  16. MyClass obj2(2); //同上,调用MyClass(int i=0)初始化对象,输出1  
  17. MyClass obj3(obj1); //使用obj1 对象来初始化obj3 对象,这里是属于复制初始化的情形,会  
  18. 调用复制构造函数 MyClass(const MyClass&x),因此,在这里会输出2  
  19. return 0;  
  20. }//因为创建了3 个对象:obj1、obj2、obj3,在这里3 个对象都会消失,因此,会调用三次析构函数,因  
  21. 此,会输出3 次4 

程序最后输出 112444。所以,选项 A正确。

【真题 232】以下关于 struct和 class的描述中,说法正确的是()。

A.struct的成员默认是 public,class的成员默认是 private

B.struct不能继承,class可以继承

C.struct可以有无参构造函数

D.struct的成员变量只能是 public

答案:A、C。

【真题 233】用关键字 class定义的类,其成员默认的访问属性为()。

A.private B.protected C.public D.无定义

答案:A。

在 C++语言规范中,规定成员默认访问属性为 private。所以,选项 A正确。

所以,本题的答案为 A。

【真题 234】对于 protected成员,下面说法错误的是()。

A.通过 public继承的派生类可以访问基类的 protected成员

B.从派生类继承的子类里可以访问基类的 protected成员

C.派生类可以定义一个同名的非 protected成员

D.派生类可以访问基类对象的 protected成员

答案:A。

【真题 235】在 C++语言中,以下有关类的初始化叙述中,正确的是()。

A.静态函数中不能出现 this指针 B.可以在类定义时,对对象直接初始化

C.一般数据类型可以在类的外部进行初始化 D.静态数据类型可以在类的外部进行初始化答案:A、D。对于选项 A,静态函数属于类本身,不与类绑定,因此,不能用 this指针。所以,选项 A正确。对于选项 B,在类定义时,无法使用构造函数,因此,无法完成对象的初始化。所以,选项 B错误。对于选项 C,一般成员变量需要在类内进行初始化。所以,选项 C错误。对于选项 D,静态成员变量必须在类外初始化,静态成员常量在类中初始化。所以,选项 D正确。

【真题 236】类的成员有三种访问属性,分别是 public、protected、private,子类能够访问的成员是()。

A.都能访问 B.public和 protected C.public和 private D.protected和 private

答案:B。

public(公有)继承、 protected(保护)继承和 private(私有)继承是三种常见的继承方式,三者的具体使用方式如下所示:

(1)public(公有)继承

基类的 public与 protected成员对子类都可见,但是只有 public成员对子类的对象是可见的。也就是说子类可以访问父类的 public与 protected的成员,但是子类的对象无法访问基类的 protected的成员。

(2)protected(保护)继承

基类的 public与 protected成员对子类都可见,但是基类的成员对子类的对象都不可见。因为基类的 public和 protected成员都变成了子类的 protected成员,显然一个对象无法直接访问 protected成员。

(3)private(私有)继承基类的 public与 protected成员对子类都可见,但是基类的成员对子类的对象都不可见。因为基类的

public和 protected成员都变成了子类的 private成员,显然一个对象无法直接访问 private成员。

下表为成员访问控制列表。

从上表分析可知,选项 B正确。

【真题 237】面向对象的三个基本元素与五个基本原则是什么?

答案:面向对象方法首先对需求进行合理分层,然后构建相对独立的业务模块,最后通过整合各

模块,达到高内聚、低耦合的效果,从而满足客户要求。具体而言,它有三个基本特征:封装、继承和多态。

1)封装是指将客观事物抽象成类,每个类对自身的数据和方法实行保护。类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的类或者对象进行信息隐藏。在 C++语言中,类是一种封装手段,采用类来描述客观事物的过程就是封装,本质上是对客观事物的抽象。

2)继承可以使用现有类的所有功能,而不需要重新编写原来的类,它的目的是进行代码复用和支持多态。它一般有三种形式:实现继承、可视继承和接口继承,其中实现继承是指使用基类的属性和方法而无须额外编码的能力,可视继承是指子窗体使用父窗体的外观和实现代码,接口继承仅使用属性和方法,实现滞后到子类实现。前两种(类继承)和后一种(对象组合 =>接口继承以及纯虚函数)构成了功能复用的两种方式。通过继承创建的新类称为“派生类”或“子类”,被继承的类称为“父类”“基类”或“超类”,而继承的过程就是从一般到特殊(具体)的过程。

喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:365934973

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

精通ASP.NET 2.0+XML+CSS网络开发混合编程

本书以最新的ASP.NET 2.0为基础,详细阐述了当前网络开发的经典架构ASP.NET 2.0+XML+CSS的各个知识点,以及SQL Server 2005的相关知识。全...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊