复试——面向对象

1.面向对象的三个基本特征
封装:把数据和方法隐藏起来,对数据和方法的访问只能通过已定义的接口。
继承:在一个或多个类的基础上建立一个新的类。
多态:不同的对象对同一信息会产生不同的行为结果,即用同样的接口访问不同的函数。

抽象:将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象。
2.什么是const,作用是什么?
Const修饰,实际上就是将对应的可读写性改成了只读性。靠近谁就修饰谁。
1.定义变量
变量的值在其生命周期内不能改变,用multable修饰变量就能改变。
⒉.定义指针
主要分为三种情况:不能修改指针指向的值,不能修改指针的值,两者皆不能修改。
3.定义函数形参
形参在函数中不会被改变
4.定义对象
在定义对象,对象中所有数据成员的值不能改变;
在定义数据成员,则该数据成员不能被改变;
定义成员函数,则只能引用本类中的数据成员,不能修改它们。
const P92——P96
3.const与define的区别
宏定义只是对值进行简单的替换,不进行类型检查;而const有具体的类型,在编译阶段会进行类型检查。
#define宏是在预处理阶段展开,而const常量在编译运行阶段。
const定义的常量在程序的运行过程中只有一份拷贝;而#define定义的常量在内存中有若干个拷贝。
4.static作用有以下两个:
Static:用static修饰的内容在内存中独立存储,优先于对象产生,属于类而不属于任何一个对象,可以被类中的对象所共享。
1.规定内容的作用区域,就是内容所在的函数或类,只有在该函数/类才能调用。
2.规定内容的生命周期,内容在函数/类执行完毕后不会被回收,会一直保留,直至程序结束。
static静态成员 P195——P200
5.构造函数和析构函数及其调用顺序
构造函数:创建对象时对对象的数据成员进行初始化。与类名相同且没有返回值。
析构函数:在系统释放对象之前进行一些清理工作,把对象所占用的额外内存空间归还给系统。

当派生类中有对象成员时,执行派生类构造函数的顺序是:
1.调用基类构造函数,对基类数据成员初始化
⒉调用对象成员构造函数,对对象数据成员初始化
3.调用派生类构造函数,对派生类数据成员进行初始化
执行析构函数顺序与之相反。
6.函数重载及其要求
函数重载:在同一个作用域中使用同一函数名定义多个函数,这些函数的参数个数或参数类型不同,这些同名函数用来实现同一类的操作。
函数重载要求:函数参数的个数或类型必须至少有其中之一不同。
7.静态数据成员与静态成员函数
静态数据成员:静态数据成员是可以被类中所有对象共享的数据成员,静态数据成员只能在类体外进行初始化,在所有对象之外单独开辟空间,在编译时为其分配空间,在结束时释放空间,既可以通过对象引用,也可以通过类名引用。

静态成员函数:在类定义中,有static修饰的成员函数称为静态成员函数,它不属于任何一个特定的对象,一般来说静态成员函数访问的一般是静态数据成员或全局变量,不能访问普通数据成员。可以通过类多或对象名两种方法访问。可以用它在建立任何对象之前处理静态数据成员。
8.静态数据成员与全局变量的不同
全局变量可以被任意的类或函数调用,静态数据成员只能在其所用范围(类中)被调用。
9.为什么引入友元的概念?
类中的私有成员只能通过它的成员函数来访问,有时候需要在类的外部访问类的私有成员,所以就需要一种涂径。在不放弃私有成员安全性的情况下,使得类外部的函数或类能够访问类中的私有成员,就引入了友元的概念,友元是一扇通向私有成员的后门。
10.什么是友元函数?
友元函数:由friend关键字修饰,不是当前类的成员函数,而是独立于当前类的外部函数,它可以访问该类的所有对象的成员,包括公有成员和私有成员。友元函数—般是带有一个该类的入口参数,因为友元函数不是类的成员函数,不能直接引用对象成员名,必须通过入口参数传递进来的参数名或对象指针来引用该对象的成员。
11.友元成员函数
除了一般的函数可以作为某个类的友元外,一个类的成员函数也可以作为另外一个类的友元,这个成员函数不仅可以访问自己所在类对象中的私有成员和公有成员,还可以访问friend声明语句所在类对象中的私有成员和公有成员。
12.友元类
一个类可以成为另外一个类的友元。当一个类被声明为另一个类的友元时,它的所有成员函数都成为另外一个类的友元函数,这意味着友元类中所有成员函数都可以访问另一个类中的私有成员。
13.运算符重载
运算符重载的方法是定义一个重载运算符的函数,使制定的运算符不仅能实现原有的功能,还能够在其基础上进行了扩展。也就是说,运算符重载是通过定义函数来实现的,运算符重载实质上是函数的重载。
Operator+运算符名称
14.运算符重载函数的使用
1.一种是作为类的友元函数进行使用。
2.一种是作为类的成员函数进行使用
15.重载运算符的规则
1.C++不允许用户自己定义新的运算符,只能对已有的进行重载;
2.C++不能对﹒(成员访问运算符),*(指针访问运算符),: :(域运算符), sizeof(长度运算符),? ∶(条件运算符)共5个;
3.重载不能够改变运算符的目数
4.重载不能改变运算符的优先级
5.重载不能改变运算符的结合性
6.重载运算符的函数不能有默认的参数
16.为什么要使用继承?
减少设计类的冗余开发,从而较好解决代码重用问题。
继承方式:
Public(公用继承):基类共用成员和保护成员在派生类中保持原有属性,其私有成员仍为基类私有。
Private(私有继承,默认):基类的共用成员和保护成员在派生类中成了私有成员,其私有成员仍为基类私有。
Protected(受保护的继承):基类的共用成员和保护成员在派生类中成了保护成员,其私有成员仍为基类私有。
17.多重继承
多重继承:一个派生类有两个或多个基类。多级派生的构造函数,每一层派生类的构造函数只负责调用它的直接基类的构造函数。
18.虚基类、虚函数的作用 P139 P172——P178
虚基类的作用:使得在间接继承共同基类时只保留其一份成员。
虚函数的作用是允许在派生类中重新定义与基类同名的函数,并且可以通过指向基类对象的指针或基类对象的引用来访问基类和派生类中的同名函数。
注意:为了保证虚基类在派生类中只继承一次,应当在该基类的所有直接派生类中都把基类声明为虚基类。
注意:声明虚基类不是在声明基类时声明的,而是在声明派生类时的指定继承方式时声明的。
在声明继承方式时,将关键字virtual加在相应的继承方式前面即可。
19.组合与继承
类的组合:在一个类中以另外一个类作为数据成员,称为类的组合。
继承是纵向的,组合是横向的。通过继承建立了派生类和基类之间的关系,是一种“是的关系,比如"白猫是猫";派生类是基类的具体化实现,是基类中的一种。组合是“有"的关系,比如"老师有生日这个属性"。
20.多态的实现
从系统实现的角度看,多态性可分为两类:动态多态性,静态多态性。
静态多态性:是通过函数的重载来实现的,由函数重载和运算符重载形成的多态性属于静态多态性;在系统编译时系统就知道要调用哪个函数,又称编译时的多态性。

动态多态性:不在编译时确定调用的是哪个函数,而是在程序运行过程中动态地确定操作所针对的对象,又称运行时的多态性(通过虚函数实现)
21.抽象类
一个类中如果有纯虚函数,那么该类为神象类抽象类是不允许实例化对象的,作用:作为一个类族的共同基类,主要用来派生子类。纯虚函数在派生类中一定要实现,如果派生类中不实现基类中的纯虚函数,派生类就变成抽象类。
22.抽象类与接口的区别
抽象类的目的是为了延展类的继承结构,让继承结构整体更完整;
接口是为了实现类注入新的特性、功能。
抽象类 P179——P180

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值