c++面试题集锦(一)

一、用简介语言描述C++

C++是一种静态类型的、编译式的、通用的、大小写敏感的、不规则的编程语言,支持过程化编程、面向对象编程和泛型编程。C++是一种中级语言,综合了高级语言和低级语言的特点。C++是C的一个超集,事实上,任何合法的C程序都是合法的C++程序。注:使用静态类型的编程语言是在编译时执行类型检查,而不是在运行时执行类型检查的。所以C++是在编译时执行类型检查的。

二、C++和C的区别

  • C++在C的基础上添加类;
  • C主要是面向过程的,C++主要是面向对象的;
  • C主要考虑通过一个过程将输入经过各种运算后得到一个输出,C++主要考虑是如何构造一个对象模型,让这个模型契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出。

三、什么是面向对象

面向对象是一种思想,是基于面向过程而言的,就是说面向对象是将功能通过对象来实现的,将功能封装进对象之中,让对象去实现具体的细节;这种思想是将数据作为第一位,而方法或者说是算法作为其次的。面向对象三大特征:封装性、继承性、多态性。其中封装性是指隐藏了对象的属性和实现细节,仅对外提供公共的访问方式,这样就隔离了具体的变化,便于使用,提高了复用性和安全性。对于继承性,就是两种事物间存在着一定的所属关系,那么继承的类就可以从被继承的类中获得一些属性和方法;这就提高了代码的复用性。继承是作为多态的前提的。多态是说父类或接口的引用指向了子类对象,这就提高了程序的扩展性,也就是说只要实现或继承了同一个接口或类,那么就可以使用父类中相应的方法,提高程序扩展性,但是多态有一点不好之处在于父类引用不能访问子类中的成员。

举例:比如说你要去饭店吃饭,你只要去饭店找到服务员,告诉她你要吃什么,然后就会给你做出来让你吃,你并不需要知道这个饭是怎么做的,你只需要面向这个服务员,告诉他你要吃什么,然后他也只需要面向你吃完收到钱就好,不需要知道你怎么对这个饭进行吃。

1、特点:

a、将复杂化的事情简单化;

b、面向对象将以前的过程中的执行者,变成了指挥者;

c、面向对象这种思想是符合现在人们思考习惯的一种思想;

2、面向对象的三大特征:封装、继承、多态

四、封装、继承、多态、虚函数

a、封装:只隐藏对象的属性和实现细节,仅对外提供公共访问方式

好处:将变化隔离、便于使用、提高复用性、提高安全性

原则:将不需要对外提供的内容隐藏起来,把属性隐藏,提供公共方法对其访问

b、继承:提高代码复用性;继承是多态的前提

注:子类中所有的构造函数都会默认访问父类中的空参数的构造函数,默认第一行有super();若无空参数构造函数,子类中需指定;另外,子类构造函数中可自己用this指定自身的其他构造函数

c、多态:是父类或接口定义的引用变量可以指向子类或具体实现类的实例对象

好处:提高了程序的扩展性

弊端:当父类引用指向子类对象时,虽提高了扩展性,但只能访问父类中具备的方法,不可访问子类中的方法;即访问的局限性。

目的:封装可以使得代码模块化,继承可以扩展已经存在的代码,他们的目的都是为了代码重用。而多态的目的则是为了接口重用。为了类在继承和派生的时候,保证使用家族中任一类的实例的某一属性时的正确调用。

d、虚函数:被virtual关键字修饰的成员函数

作用:实现多态性,多态性是将接口与实现进行分离;用形象的语言来解释就是实现以共同的方法,但因个体差异而采用不同的策略。

不能声明为虚函数的是:构造函数。因为构造一个对象,必须清楚地知道要构造什么,否则无法构造一个对象。析构函数可以为纯虚函数。

e、纯虚函数存在的意义:

在很多情况下,基类本身生成对象是不合情理的。例如,动物作为一个基类可以生出狮子、老虎等子类,但是动物本身生成对象明显不合常理。为了解决这个问题,方便使用累的多态性,引入了纯虚函数,将函数定义为纯虚函数(方法:virtual Return Type Function()=0;),则编译器要求在派生类中必须予以重写以实现多态类。同时含有纯虚拟函数的类称为抽象类,它不能生成对象。

使用纯虚函数的情况:1、当想在基类中抽象出一个方法,且该基类只能被继承,而不能被实例化;2、这个方法必须在派生类(derived class)中被实现;

f、虚函数与纯虚函数的区别

虚函数是为了重载和多态,在基类中是有定义的,即便定义为空。在子类中可以重写。

纯虚函数在基类中没有定义,必须在子类中加以实现。

多态的基础是继承,需要虚函数的支持,简单的多态是很简单的。

子类继承父类大部分的资源,不能继承的有构造函数,析构函数,拷贝构造函数,operator=函数,友元函数等。


你可能感兴趣的:(C++)