1.         什么是类?什么是对象?对象与类的关系是什么?

答:类就是相同的数据和相同的一组对象的集合,即类是对具有相同数据结构和相同操作的一类对象的描述;

对象是描述其属性的数据以及对这些数据施加的一组操作封装在一起构成的统一体,对象可以认为是:数据+操作;

类和对象之间的关系是抽象和具体的关系。

2.         构造函数和析构函数的主要作用是什么?他们各有什么特性?

答:构造函数主要用于为对象分配空间,进行初始化。构造函数除了具有一般成员函数的特征外,还具有一些特殊的性质:

(1)构造函数的名字必须与类名相同

(2)构造函数可以有任意类型的参数,但不能指定返回类型。它有隐含的返回值,该值由系统内部使用。

(3)构造函数是特殊的成员函数,函数体可写在类体内,也可写在类体外。

(4)构造函数可以重载,即一个类中可以定义多个参数个数或参数类型不同的构造函数。

(5)构造函数被声明为公有函数,但它不能像其他成员函数那样被显式地调用,它是在定义对象的同时被调用的。

析构函数也是一种特殊的成员函数。它执行与构造函数相反的操作,通常用于撤消对象时的一些清理任务,如释放分配给对象的内存空间等。析构函数有以下一些特点:

(1)析构函数与构造函数名字相同,但它前面必须加一个波浪号(~);

(2)析构函数没有参数,也没有返回值,而且不能重载。因此在一个类中只能有一个析构函数;

(3)当撤消对象时,编译系统会自动地调用析构函数。

3.         有哪几种继承方式?每种方式的派生类对基类成员的继承性如何?

     答:三种继承方式(公有public、保护protected、私有private);继承性可参见教材P143。

基类(父类)得私有成员,派生类(子类)都不能访问;

基类得公有成员,派生类得继承方式决定了其函数得形式!

基类得保护成员在派生类得公有继承中也是保护类型!

4.         简要叙述友元运算符函数和成员运算符函数有什么不同点?

    答:(1)对双目运算符而言,成员运算符函数带有一个参数,而友元运算符函数带有两个参数;对单目运算符而言,成员运算符函数不带参数,而友元运算符函数带一个参数。

(2)双目运算符一般可以被重载为友元运算符函数或成员运算符函数,但某些情况,必须使用友元函数。

5.         派生类构造函数和析构函数的执行顺序是怎样的?

答:当创建对象时,编译系统会自动调用构造函数。当撤销对象时,编译系统会自动调用析构函数。当创建派生类的对象时,首先执行基类的构造函数,然后执行派生类的构造函数。

当撤销对象时,则先执行派生类的析构函数,然后再执行基类的析构函数。

6.         什么是虚函数?虚函数与函数重载有哪些相同点和不同点?

答:虚函数是一个在某基类中声明为virtual并在一个或多个派生类中被重新定义的成员函数。声明虚函数的格式如下:

            virtual <返回值类型> <函数名>(<参数表>);

在派生类中重新定义基类的虚函数是函数重载另一种形式,但它不同于一般的函数重载。

当普通的函数重载时,其函数的参数或参数类型必须有所不同,函数的返回类型也可以不同。

对于虚函数,如果仅仅是返回类型不同,其余均相同,系统会给错误信息;若仅仅函数名相同,而参数的个数、类型或顺序不同,系统将它作为普通的函数重载,这时虚函数的特性将丢失。

 

7.         函数重载

     答:函数重载是指具有相似功能的不同函数使用同一函数名,但这些同名函数的参数类型、参数个数、返回值、函数功能可以不同。编译系统将根据函数参数的类型和个数来判断使用哪一个函数。体现了C++对多态性的支持

8.         函数模板

答:可以把逻辑功能相同而函数参数和返回值类型不同的多个重载函数用一个函数来描述。参数化的函数称为函数模板,代表的是一个函数家族。定义:

template <模板参数表>

<返回值类型><函数名>(<参数表>)

{

                        <函数体> 

}

9.         类的继承和派生

答:类的继承就是根据一个类创建一个新类的过程。

类的派生就是从已有类产生新类的过程。

10.      多态性及其实现

答:多态性是指发出同样的消息被不同类型的对象接收时导致完全不同的行为。

多态的实现:

a)          函数重载

b)         运算符重载

c)          虚函数赋值兼容规则

11.      赋值兼容规则

答:一个公有派生类的对象在使用上可以被当作基类的对象,反之则禁止。具体表现在:

a)         派生类的对象可以被赋值给基类对象。

b)        派生类的对象可以初始化基类的引用。

c)         指向基类的指针也可以指向派生类

12.       联编:静态联编,动态联编

答:联编又称绑定:是指计算机程序自身彼此关联的过程,也就是把一个函数名和一个函数体联系在一起的过程

静态联编:在编译过程中,编译系统可以根据类型匹配等特征来确定程序中调用操作与执行某个同名函数实现之间的关系,即确定某一个同名函数到底是要调用哪一段函数实现代码。

函数重载和运算符重载就是通过静态联编方式实现的编译时的多态的体现。

静态联编的优点是函数调用速度快、效率较高,缺点是编程不够灵活

动态联编:只有在运行程序时才能确定将要调用的函数。这种在运行阶段进行的联编称为动态联编。

动态联编的优点是提供了更好的编程灵活性、问题抽象性和程序易维护性,缺点是与静态联编相比,函数调用速度慢

13.      纯虚函数和抽象类

答:带有纯虚函数的类称为抽象类:

抽象类的主要作用是将有关的派生类组织在一个继承层次结构中,由抽象类为它们提供一个公共的根,相关的派生类就从这个根派生出来。定义:

class  类名

{

                 virtual 类型 函数名(参数表)=0;

             }

C++专题 - 面向对象总结的更多相关文章

  1. python 面向对象专题(十):特殊方法 (三)__get__、__set__、__delete__ 描述符(三)方法是描述符

    在类中定义的函数属于绑定方法(bound method),因为用户定义的函数都有 __get__ 方法,所以依附到类上时,就相当于描述符.示例 20-13 演示了从 面向对象专题(九)示例 20-8 ...

  2. C++专题 - 修练8年C++面向对象程序设计之体会 林锐

    六年前,我刚热恋“面向对象”(Object-Oriented)时,一口气记住了近十个定义.六年后,我从几十万行程序中滚爬出来准备写点心得体会时, 却无法解释什么是“面向对象”,就象说不清楚什么是数学那 ...

  3. python 面向对象专题(八):特殊方法 (一)__get__、__set__、__delete__ 描述符(一)

    https://www.cnblogs.com/flashBoxer/p/9771797.html 实现了 __get__.__set__ 或 __delete__ 方法的类是描述符.描述符的用法是, ...

  4. python 面向对象专题(七):异常处理

    目录 python面向对象07/异常处理 1. 异常错误分类 2. 什么是异常? 3. 异常处理 4. 为什么要有异常处理 5. 异常处理的两种方式 1.if判断 2.try 6. 常见异常种类 1. ...

  5. python 面向对象专题(六):元类type、反射、函数与类的区别、特殊的双下方法

    目录 Python面向对象06 /元类type.反射.函数与类的区别.特殊的双下方法 1. 元类type 2. 反射 3. 函数与类的区别 4. 特殊的双下方法 1. 元类type type:获取对象 ...

  6. python 面向对象专题(五):私有成员、类方法、静态方法、属性、isinstance/issubclass

    https://www.cnblogs.com/liubing8/p/11325421.html 目录 Python面向对象05 /私有成员.类方法.静态方法.属性.isinstance/issubc ...

  7. python 面向对象专题(四):封装、多态、鸭子类型、类的约束、super

    https://www.cnblogs.com/liubing8/p/11321099.html 目录 Python面向对象04 /封装.多态.鸭子类型.类的约束.super 1. 封装 2. 多态 ...

  8. python 面向对象专题(三):继承

    目录 Python面向对象03 /继承 1. 初识继承 2. 单继承 3. 多继承 4. 总结 1. 初识继承 概念:专业角度:如果B类继承A类,B类就称为子类,派生类,A类就称为父类,超类,基类 种 ...

  9. python 面向对象专题(二):类的空间问题、类与对象之间的关系、类与类之间的关系

    https://www.cnblogs.com/liubing8/p/11308127.html 目录 Python面向对象02/类的空间问题.类与对象之间的关系.类与类之间的关系 1. 类的空间问题 ...

  10. python 面向对象专题(一):面向对象初识、面向对象结构、类、self、实例化对象

    https://www.cnblogs.com/liubing8/p/11301344.html 目录 Python面向对象01 /面向对象初识.面向对象结构.类.self.实例化对象 1. 面向对象 ...

随机推荐

  1. [原]RobotFrameWork(四)变量运算与Evaluate

    一.特殊变量运算: 执行结果: 二.Evaluate使用 函数释义:Evaluate是执行python表达式,并返回执行结果 示例1: 执行结果: 示例2: 执行结果: 作者:liuheng12345 ...

  2. Tyvj P1463 智商问题 分块

    P1463 智商问题 时间: 1500ms / 空间: 131072KiB / Java类名: Main 背景 各种数据结构帝~各种小姊妹帝~各种一遍AC帝~ 来吧! 描述 某个同学又有很多小姊妹了他 ...

  3. ubuntu Server LAmp环境

    1. LAMP 的安装 sudo apt-get install apache2 mysql-server mysql-client php5 php5-gd php5-mysql 由于LAMP大部分 ...

  4. 为什么JavaScript开发如此疯狂

    本文由码农网 – 小峰原创翻译,转载请看清文末的转载要求,欢迎参与我们的付费投稿计划! Web开发太有意思了! 但是JavaScript则……令人望而生畏. Web开发中其他一切对你而言都是小菜一碟, ...

  5. Spark RDD/Core 编程 API入门系列之动手实战和调试Spark文件操作、动手实战操作搜狗日志文件、搜狗日志文件深入实战(二)

    1.动手实战和调试Spark文件操作 这里,我以指定executor-memory参数的方式,启动spark-shell. 启动hadoop集群 spark@SparkSingleNode:/usr/ ...

  6. Visual Studio 2015安装过程卡住,解决办法

    Visual Studio 2015安装过程中卡住的情况有很多,我遇到的是卡在安装windows 更新KB2999226,解决办法 手动安装此更新包,位置在Visual Studio的安装包中,目录: ...

  7. CocoaPods不更新spec仓库进行install/update

    最近使用CocoaPods来添加第三方类库,无论是执行pod install还是pod update都卡在了Analyzing dependencies不动 原因在于当执行以上两个命令的时候会升级Co ...

  8. (9/18)重学Standford_iOS7开发_动画、自动布局_课程笔记

    最近开始实习,没多少时间更新了=_= 第九课: 1.上节课demo:Dropit完整实现 https://github.com/NSLogMeng/Stanford_iOS7_Study/commit ...

  9. 服务器后端开发系列——《实战FastDFS分布式文件系统》[转]

    1.FastDFS的配置.部署与API使用解读(1)Get Started with FastDFS 内容:讲解FastDFS的背景.基本原理,并讲述基本的配置.部署和测试的内容. 2.FastDFS ...

  10. 史上比较用心的纯代码实现 AutoLayout

    入职有两三个月了吧,都是使用 Objective-C 纯代码(虽然有时候偷偷参杂一些 Swift 开源库)来编写公司APP,写布局的时候几乎都是要么在初始化的时候用 initWithFrame,要么就 ...