C++部分知识点复习(二)

1.简述“面向对象”和“面向过程”编程思想的认识与思考:

        “面向过程”是一种以事件为中心的编程思想,就算分析出问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以。过程化编程强调功能,以过程模块为中心,分层逐步展开设计。通常采用结构化程序设计,基本思路为:自顶向下、逐步求精。

        “面向过程”的编程思想就是把你需要解决的问题中的所有具体的东西,都看成一个个具有属性和行为的对象,然后把所有具有相同性质的对象抽象成类,那些与问题无关的对象则忽略。对象化编程强调分离抽象层次,以便让程序员分工,关心不同抽象层次中的细节,而不用关心不同抽象层次的联系,数据安全而隐蔽,不同抽象层次的职责分明。

2.const和static有什么作用:

const:

  1. 可以定义const常量,具有不可变性,从而保护被修饰的东西,防止意外的修改,增强程序的健壮性。
  2. 便于进行类的检查,使编译器对处理内容有更多的了解,消除一些隐患。
  3. 可以避免模糊的数字出现,同样可以很方便地进行参数的调整和修改。同宏定义一样,可以做到不变则已,一变全变。
  4. 可以节省空间,避免不必要的内存分配。const定义的常量在程序运行过程中只有一份拷贝,而#define定义的常量在内存中有若干个拷贝。
  5. 提高效率。

static:

  1. 类的静态数据成员:它属于类,是该类的所有对象所共有的,所共同维护的,只有一份拷贝,只要对静态数据成员的值更新一次,保证所有对象存取更新后的相同的值,这样可以提高时间效率。在静态成员函数的实现中不能直接引用类中说明的非静态成员,可以引用类中说明的静态成员。
  2. 在全局变量前加上关键字static,该变量就被定义成为了一个静态全局变量。
  3. 静态函数只能在本源文件中使用,在文件作用声明的inline函数默认为static类型。

3.友元关系的优缺点:

优点:通过友元,一个不同函数或另一个类中的成员函数可以访问类中的私有成员和保护成员。C++中的友元为封装隐藏这堵不透明的墙开了一个小口,外界可以通过这个小孔窥视内部的秘密。

缺点:友元的正确使用能提高程序的运行效率,但同时也破坏了类的封装性和数据的隐藏性,导致程序可维护性变差。

4.C++多态的实现:

        多态是指同样的消息被不同的类型的对象接收时导致完全不同的行为,是对类的特定成员函数的再抽象。C++支持的多态有多种类型,重载(包括函数重载和运算符重载)和虚函数是其主要的方式。

5.STL是什么、组成部分和核心作用:

        STL是C++提供的标准模板库。

        STL的主要组成部分为:容器、迭代器、算法、函数对象和适配器。其中算法处于核心地位,迭代器如同算法和容器之间的桥梁,算法通过迭代器从容器中获取元素,然后将获取的元素传递给特定的函数对象的操作,最后将处理后的结果存储到容器中。

6.为什么说“继承是C++面向对象的一个主要特征之一”,请简单说明:

        继承是软件重用的一种形式,程序员创建的新类通过继承这一方式,从现有的类中吸收其数据和行为,再根据新类的特征,即对象的特征,赋予其新的数据和行为,并通过新的功能进一步提高,在面向对象的程序设计中,采用继承方式来组织设计系统的类,可以提高程序的抽象程度,更接近人的思维方式,使程序结构更清晰并降低编码和维护的工作量。

7.如何声明和使用虚函数,并说明它在多态性中的作用和意义:

        声明虚拟函数时,在基类的函数原型前加关键字virtual,在派生类中重写函数,用名称和圆点成员选择运算符引用一个特定的对象以调用虚函数,被调用的虚函数是在编译时确定的;也可以通过基类指针调用函数,让程序在任何给定的时刻基于基类指针所指对象的对象类型,动态确定执行相应的派生类的函数。虚函数是多态性的主要实现方式,利用虚拟函数和多态性,程序员可以处理普遍性而让执行环境去处理特殊性,即使在不知道一些对象的类型的情况下,只要这些对象属于同一继承层次并且通过一个共同的基类指针访问,程序员也可以命令各种对象表现出合适这些对象的行为。

8.请说明函数模板(Function Template)和函数模板实例化(function——template specification)的区别和联系:

        函数模板:以具体的类型为实参来生成函数体的模板;

        模板函数:函数模板的实例化的结果,由函数模板将涉及的数据类型为参数来生成的模板化函数。

9.什么是运算符重载,它如何增强C++的扩展性:

        运算符重载是对已有的运算符赋予多重含义,使得同一个运算符作用于不同类型的数据时导致不同的行为。

        运算符重载的本质就算函数重载,可以改变现有运算符的操作方式,以使用于类类型,为类的用户提供了一个直接的接口,使得用户程序所用的语言是面向问题的,而不是面向机器的,增强了C++的扩展性。

10.类作用域和文件作用域的区别是什么:

        类作用域:类定义作用域为包含类定义的花括号块,如果没有花括号语句块,则为从类定义开始的全部代码空间。而类作用域范围更小,仅包括类定义内部和所有其成员函数的定义体,类作用域中,类的成员函数对数据成员和其他成员函数具有无限制的访问权。

        文件作用域:是在所有函数定义之外说明的,其作用域从说明点开始,一直延伸到源文件结束。文件作用域即为静态全局的。用static修饰的全局数据和函数是文件作用域的。

        类作用域包含于文件作用域。在类作用域如果声明了和文件作用域同名的标识符会屏蔽全局作用域中的标识符。在类域中定义的变量不能使用auto、register和extern等修饰符,只能使用static修饰符,而定义的函数也不能用extern修饰符。

11.存储类的说明符有哪些:

        auto、static、extern和register。

        auto:标明一个变量具有自动存储时期,该说明符只能在具有代码块作用域的变量声明中。比如一般的全局变量或者是在函数原型中的参数。默认的存储类型即为auto。

        register:只能用在具有代码块作用域的变量。请求一个变量存储在寄存器中快速使用,但是不能获得改变量的地址。register常是不必要的。

        static:使用static声明的局部变量仅被其声明所在的函数所知,static局部变量在函数返回到它的调用者后仍然保留着变量的值。

        extern:声明一个在其他地定义了的变量(该关键字用于全局变量)。

12.重载和重写的区别:

        方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。

        重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型的不同、参数个数不同、或者二者都不同)则视为重载;重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的参数列表,有兼容的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常(里氏代换原则)。重载对返回类型没有特殊的要求,不能根据返回类型经行区分。

13.三种传参方式:

        值传递:传递的是实参的一个拷贝,修改形参不会改变实参值。

        地址传递:传递的是实参地址的一个拷贝,修改形参不会改变实参值。

        引用传递:传递的是实参的一个别名,修改形参会导致改变实参。被调用函数的形参只有在被调用时才会临时分配存储单元,一旦调用结束则释放内存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值