c++学习记录(三)
c++面向对象记录(二)
1.继承
继承是面向对象程序设计的一个重要概念。继承指依据另一个类来定义一个类,就好像子女继承父母的基因。运用继承的方法,我们就不需要重新编写数据成员。已有的类称为基类,新建的类称为派生类或者子类。
(1)子类定义
定义一个子类,使用格式:
\\class 子类名: 访问修饰符 基类名
(2)访问控制和继承
子类可以访问基类中的非私有成员,不可访问私有成员。子类继承了除下列情况外基类的所有方法:
·基类的构造方法、析构方法和拷贝构造函数
·基类的重载运算符
·基类的友元函数
(3)继承类型
使用不同类型的继承是,有以下规则:
·public继承:基类public、protected、private成员的访问属性在子类中分别变为:public、protected、private
·protected继承:基类public、protected、private成员的访问属性在子类中分别变为:protected、protected、private
·private继承:基类public、protected、private成员的访问属性在子类中分别变为:private、private、private
(4)多继承
类可以从多个类中继承,格式如下:
\\class <派生类名>:<继承方式1><基类名1>,<继承方式2><基类名2>
{
body
};
2.重载运算符和重载函数
C++ 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载。例如:在类中定义三个print函数,分别输出整型、浮点型、字符型数据,程序会判断你输入的数据类型进行合适的函数匹配,这个过程称为重载决策。
重载运算符由关键字operator和运算符符号构成,格式如下:
\\classname operator运算符(参数):
注意成员访问运算符,成员指针访问运算符,域运算符,长度运算符,条件运算符,预处理运算符不可重载
3.多态
多态使用于有层次结构并且有继承关系的类,指在调用成员函数时,根据调用的对象类型来执行不同的函数。
(1)虚函数
静态多态(静态链接或早绑定):函数调用在程序执行前已准备好。通过静态多态后,如果子类中不进行操作,则会返回基类中的设置。如果想根据子类而进行改变,则要定义虚函数(动态链接或后期绑定)。
虚函数以关键字virtual定义
(2)纯虚函数
如果你想在子类中重新定义基类中的函数,而基类中的函数又不能有意义,则可以使用纯虚函数,格式:
\\virtual 数据类型 function()=0;
4.数据抽象
数据抽象是一种依赖于接口和实现分离的编程(设计)技术,是指只向外界提供关键信息,并隐藏其后台的实现细节,即只表现必要的信息而不呈现细节。我的理解是能给用户看的部分使用public定义,其他部分则使用protected或者private定义。
数据抽象的好处
(1)类的内部受到保护
(2)类实现可能随着时间的推移而发生变化,以便应对不断变化的需求
5.数据封装
数据封装是一种把数据和操作数据的函数捆绑在一起的机制。c++通过创建类来进行数据封装。数据封装使用到访问修饰符public、protected和private。一般为了保证良好的封装性,使用private设置私有成员进行访问限制。
6.抽象类
c++接口使用抽象类来实现,抽象类中至少有一个纯虚函数。设计抽象类是为了给其他类提供一个可继承的适当基类,但抽象类不能被用于实例化对象,只能作为接口。可用于实例化对象的类被称为具体类。