版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C+十面向对象程序设计
第一章:C++的初步知识
1.C语言和C++的区别?
C语言是结构化和模块化的语言,它是面向过程的。在处理较小规模的程序时,使用c
语言极为方便。但是当问题规模较复杂时,c语言便显得较为吃力。
C++保留了c语言的所有优点,并增加了面向对象机制,具有类、封装、继承、多态
等特性,在开发较大规模程序时可以明显提高软件开发效率。
2.#define与const
在c语言中常用#define指令在定义符号常量这样定义是在预编译时进行字符置换,
在预编译后,程序不再有PI这个标识符。PI不是变量,没有类型,不占用存储单元,且容
易出错。
C++中提供const定义常变量,它具有变量的属性,有数据类型,占用存储单元,有
地址,可用指针指向它,只是在程序运行时变量值不变,且不能改变。
3.什么是函数模板?
建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代替,
这个通用函数就称为函数模板。
声明:lernplcite<typencirneT>
4.什么是"引用”?
引用又称别名,引用的作用是为一个变量再起另一个名字,以便在需要时可以间接引
用该变量。对一个变量的〃引用”的所有操作,实际上都是对其原来的变量的操作。在声
明引用时,必须对其初始化。
注:引用不是独立的变量,不单独分配存储单元。
5.值传递和引用传递的区别?
值传递将实参的值传递给形参,形参是实参的一个拷贝;
引用传递是将实参的地址传给引用型形参,这时形参和实参是同一个变量
6.什么是内置函数?
调用函数需要一定的时间,如果有些函数需要频繁使用,则累计所用时间会很长,从
而降低程序的执行效率。C++中可以通过在函数左端添加关键字inline,使程序在编译时
将所调用的函数代码直接嵌入到主调函数中,从而减少运行时间,提高运行速度,这便是
内置函数。
7.new/delete和malloc/free
在软件开发中,常常需要动态分配和撤销内存空间。
C语言中使用mdlloc/free,在使用mdlloc函数时必须指定需要开辟的内存空间的大
小,(格式:malloc(size)),此外malloc函数只能从用户处知道应开辟空间的大小而不知
道数据的类型,因此无法使其返回的指针指向具体的数据。
C++中使用new/delete,(格式:new类型[初值]),使动态分配空间更加方便。
第二章:类和对象的特性
对象:客观世界的实体。每个对象均由数据和函数组成,数据即属性,函数用来对数
据进行操作,以便实现某些功能。
封装:①将有关的数据和操作代码封装在一个对象中,形成一个基本单位,各个对象
间相互独立,互不干扰。②将对象中某些部分对外隐蔽,只留下少数接口,方便与外界联
系,接收外界消息。
抽象:将有关事物的共性归纳、集中的过程,表示同一类事物的本质。(类是对象的抽
象,对象是类的实例)
继承:
多态:由继承而产生的派生类,其对象会对同一消息不同的反应。
L面向对象设计和面向过程设计的区别?
面向过程设计的围绕功能进行的,一个函数实现一个功能,所有数据都是公用的,程
序设计者必须考虑每一个细节,即什么时候对什么数据进行操作。(组成:程序二算法+数
据结构)
面向对象设计是围绕对象进行的,将数据和有关操作封装成一个个对象,程序设计者
只需考虑如何设计类和对象以及怎样向有关对象发送消息即可。(组成:程序二对象1+对
象2+...+消息)
2.类和对象的关系
类是对象的抽象,而对象是类的具体实例。(类/对象相当于结构体类型/结构体变量)
类是抽象的,不占用内存;对象是具体的,占用存储空间。
3.C++中类和结构体的异同
C++语言在编写时为了兼容c,对结构体的功能进行了扩展,使结构体类型也具有封
装的特点,用struct声明的结构体类型实际上也是类。
区别:
①(关键)用struct声明的类,如果对其成员不做私有和公有的声明,则默认为公有;
而用class定义的类,如果对其成员不做公有和私有的声明,则默认为私有。
②结构体的执行效率要比类高。
③结构体没有析构函数,类有析构函数。
④结构体不能继承,类可以继承
4.成员函数的存储方式?
一个对象所占的空间大小只取决于该对象数据成员所占的空间,而与成员函数无关。
函数的目标代码存储在对象空间之外,供不同的对象调用。
(c++设立了this指针用来指向不同的对象)
第三章:怎样使用类和对象
1.构造函数的作用?
构造函数用来处理对象的初始化,不需要用户来调用它,而是在建立对象时自动执行,
且只能执行一次。
构造函数的名字必须与类名同名,不能任意命名。它不具有如何类型,不返回任何值。
一个类中可以定义多个构造函数,以便为对象提供不同的初始化方法,这些构造函数
具有相同的名字,而参数个数或类型不同。(重载)
2.析构函数的作用?
析构函数的作用是在撤销对象占用的内存前完成一些清理工作,使这部分内存可以被
分配给新对象使用。在对象生命周期结束时自动执行。
无返回值,无函数类型,无函数参数,不能被重载。一个类只能有一个。
3.什么时候调用构造函数和析构函数?
①全局对象:构造一在本文件模块中所有函数执行前调用;析构一mian函数执
行完毕或调用exit函数。
②局部对象:构造一建立对象时调用;析构一函数调用结束或对象释放时。
③静态局部对象:构造——第一次调用此函数定义对象时调用一次;析构一mian
函数执行完毕或调用exit函数。
4.指向对象成员函数的指针
三方面匹配:①函数类型和参数个数;②函数返回值类型;③所属类;
(格式:指针变量名二&类名::成员函数名)
5.常对象:(格式:const类名对象名[(实参表)])
——只能调用其常成员函数,不能调用普通成员函数。
怎样保证常对象数据成员的值不会改变?——不能调用常对象中的普通成员函数+常
成员函数不能修改对象的数据成员。
常数据成员:只能通过构造函数的参数初始化表对常数据成员进行初始化,任何其他
函数都不能对常数据成员赋值。
常成员函数:(格式:类型名函数名(参数表)const)
—只能引用本类中的数据成员,而不能修改它们。
指向对象的常指针:(格式:类名*const指针变量名)
----指向不变
指向常对象的指针:(格式:const类型名*指针变量名)
——常变量只能用指向常变量的指针来指向它,不能通过指针改变变量的值。
6.静态成员static
静态数据成员:在程序编译时被分配空间,程序结束时释放;在所有对象之外单独开
辟空间,为所有对象所共有;只能在类体外初始化。
静态成员函数:是类的一部分而不是对象的一部分,与任何对象无关。如果要在类外
调用公用的静态成员函数,要用类名和域运算符没有this指针,只能用来访问静态数
据成员,而不能访问非静态成员。
7.友元
友元函数:如果在类以外的其他地方定义了一个函数,在类体中用friend对其进行声
明,该函数极为友元函数。可访问类中私有成员。
友元类:若A是B的友元类,则A可访问B内所有成员。特点:单向且不能传递。
优:有利于数据共享,提高程序效率。
弊:破坏封装性。
第四章:对运算符进行重载
1.什么是运算符重载?
对运算符进行函数重载,是指定的运算符不仅能实现原有的功能,而且能实现在函数
中指定的新的功能。
(格式:函数类型operator运算符名称(形参表){处理…})
好处:C++程序设计的重要基础是类和对象,通过运算符重载,可以使现有的运算符
直接应用于类对象,提供的很大的方便。
2.重载运算符的规则?
①不允许定义新的运算符,只能对现有运算符进行重载。
②重载不能改变运算符运算对象的个数。
③不能改变运算符优先级别。
④不能改变运算符的结合性。
⑤不能有默认参数。
⑥重载的运算符其参数至少应有一个是类对象。
3.运算符重载方式?
①将运算符重载的函数作为类的成员函数(有this指针,可少写一参数);一般用于单
目运算符。
②将运算符重载函数作为友元函数;一般用于双目运算符。
4.转换构造函数
只有一个形参,用于将一个其他类型的数据转换成一个类对象。
格式:类名(指定类型的数据){...}
5.类型转换函数
将一个类对象转换成另一类型的数据。只能作为成员函数。
格式:operator类型名(){转换语句…}
第五章:继承与派生
类的继承:一个新类从已有的类那里获得其已有属性。
派生类是基类的具体化,而基类是派生类的抽象。
1.继承方式?
①公用继承
基(public/protected)一派(public/protected)
基(private)一派(private)
②私有继承
基(public/protected)一派(private)
基(private)一派(private)
③保护继承
基(public/protected)一■派(protected)
基(private)一派(private)
2.派生类析构函数调用顺序?
自身一子对象一基类
3.虚基类
若一个派生类有多个直接基类,而这些直接基类又有一个共同的基类,则在最终的派
生类中会保留多份间接共同基类的同名成员,这是没有必要的。为此,产生了虚基类,使
在继承间接共同基类时只保留一份成员。
(class派生类名:virtual继承方式基类名)
4.继承与组合
类的组合:在一个类中以另一个类的对象作为数据成员。建立成员类与组合类的关系;
"有"的关系;横向。
类的继承:建立派生类与基类的关系;"是"的关系;(eg:白猫是猫);纵向。
第六章:多态性与虚函数
多态性:向不同的对象发送同一个消息,不同的对象在接收时会产生不同的行为。
1.多态性的分类?
静态多态性:通过函数重载实现。由函数重载和运算符重载形成的多态性属于静态多
态性,要求在编译时就知道调用函数的全部信息,因此在程序编译时系统就能决定要调用
的是哪个函数。优:调用速度快、效率高;缺:缺乏灵活性。
动态多态性:通过虚函数实现。不在编译时确定调用的是哪个函数,而是在程序运行
过程中才能动态确定操作所指向的对象。
2.什么是虚函数?
在基类中声明函数是虚拟的,并不是实际存在的函数,然后在派生类中才正式定义此
函数。用来解决动态多态问题,在程序运行期间,用指针指向某一类派生类对象,这样就
能调用指针指向的派生类对象中的函数,而不会调用其他派生类中的函数。(同一类族中不
同类的对象,对同一函数调用做出不同的响应)
作用:运行在派生类中重新定义与基类同名的函数,并且可以通过基类指针或引用来
访问基类和派生类中的同名函数。
3.函数重载和虚函数的区别?
函数重载处理的是同一层次上的函数同名问题,而虚函数处理的是不同派生层次上的
函数同名问题;同一类族中的虚函数首部是相同的,而函数重载时函数的首部是不同的(参
数个数或类型不同)
4.什么是纯虚函数?
纯虚函数时在声明虚函数时被初始化为0的函数。只有函数名没有函数体,不能被调
用。(他只是告诉编译系统:“我在这里声明一个虚函数,等到派生类里再定义")
作用:在基类中为其派生类保留一个函数的名字,以便派生类根据需要对其定义。
格式:virtual函数类型函数名(参数列表)=0;
5.什么是抽象类?
不用来定义对象而只作为一种基本类型用作继承的类。凡是包含纯虚函数的类都是抽
象类。
作用:为一个类族提供一个公共接口。
(注:若派生类中未对所有纯虚函数进行定义,则其依然是抽象类)
8.c和C++的区别:
c语言面向过程,重点在于算法和数据结构;
C++是面向对象语言,它是C语言的继承,既可以进行C语言的面向过程程序设计,
又可以进行面向对象的程序设计,具有类、封装、继承、多态等特性。
9.什么是内联函数?
调用函数时需要一定的使劲,若有些函数需要频繁使用,累计所用时间会很长,从而
减低程序执行效率。通过在函数左端添加关键字inline,使程序在编译时将所调用的函数
代码嵌入到主调函数中,从而减少运行时间,提高运行速度,这便是内联函数。
10.面向对象和面向过程的区别:
面向过程是一种以过程为中心的编程思想,用一个函数实现一个功能,所有的数据都
是公用的,程序设计者必须考虑每一个细节,什么时候对什么数据进行操作。组成:程序
二算法+数据结构;
面向对象是一种以对象为中心的编程思想,将数据和有关操作封装成一个对象,程序
设计者只需要设计所需的各种类和对象以及考虑怎样向有关对象发送消息,以完成所需的
任务即可。组成:程序二对象s+消息。
11.值传递和引用传递的区别:
值传递传递的是一个值的副本,函数对形参的操作不会影响实参的值;
引用传递传递的对象的内存地址,函数对形参的操作会影响实参的值,实参的值会随
着形参的值的改变而改变。
12.类和结构体有什么区别?
C++在编写时为了兼容。于是向结构体添加了功能,使其也具有类的特点,用struct
声明的结构体类型实际也是类,但两者之间依然存在差别。
①用struct声明的类若对其成员不做私有和公有的声明系统将其默认定义为public,
而用class定义的类,默认为private;②结构体的执行效率要比类高;③结构体没有析构
函数,类有析构函数;④结构体不可以继承,类可以继承。
13.引用与指针的区别?
①引用无需解引用,指针需要解引用。
②引用在定义时被初始化一次,之后不可变,指针可变
③弓I用不能为空,指针可以为空
④程序为指针变量分配内存区域,而引用不需分配内存区域。
14.什么是静态函数和静态变量?
静态数据成员在编译时就创建并初始化:在该类的如何对象建立之前就存在,不属于
任何I对象,而非静态成员变量则属于对象所有。类静态数据成员只有一个拷贝,为所有此
类的对象所共享。
15.Const
①Const修饰类的成员变量,表示成员常量,不能被修改
②Const修饰函数承诺在本函数内部不会修改类的数据成员,不会调用其它非const
成员函数
③如果const构成函数重载,const对象只能调用const函数,非const对象优先调
用非const函数
@Consl函数只能调用const函数,非const理数能调用const函数
⑤类体外定义的const成员函数,在定义和声明处都需要const修饰符
16.面向对象三大特性?
①封装:实现面向对象程序设计的第一步,封装就是将数据与函数等集合在一个个单
元中,我们称之为类。
②继承:继承主要实现重用代码,节省开发时间,子类可以继承父类的一些特性。
③多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。在
运行时,可以通过指向基类的指针,来调用实现派生类中的方法。
17.什么是虚函数和纯虚函数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 生物信息学分析IBD癌变的关键调控基因
- 保险行业数据分析师的答案解析
- 物业管理师国家职业资格考试复习含答案
- 深度解析(2026)《GBT 19448.3-2004圆柱柄刀夹 第3部分装径向矩形车刀的B型刀夹》
- 深度解析(2026)《GBT 19375-2003利木赞种牛》
- 办公室文员工作考核标准及办法
- 瓣膜介入器械的麻醉配合策略
- 环保组织招聘环保项目活动策划与执行专员面试题及答案
- 网络安全专家面试题及攻防实战案例含答案
- 剪床项目可行性分析报告范文(总投资7000万元)
- 2025至2030中国高拍仪行业项目调研及市场前景预测评估报告
- 2025中国继续教育行业市场发展现状与投资策略报告
- (21)普通高中西班牙语课程标准日常修订版(2017年版2025年修订)
- 2025年4月自考习概部分试题及答案
- 华为培训体系介绍
- 益生元管理师高级考试试卷与答案
- 特种作业安全工作培训课件
- 住宅电梯更新项目可行性研究报告
- 广东省广州市天河区2023-2024学年七年级上学期期末道德与法治试题(含答案)
- 2024-2025学年塔里木职业技术学院单招《英语》考前冲刺练习试题附答案详解【培优B卷】
- 手榴弹使用课件
评论
0/150
提交评论