您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > C++教程,从入门到精通,chap-07
第7章继承、重载和多态性继承重载多态性继承•基类和派生类•继承的访问控制•派生类的构造函数和析构函数•多重派生基类和派生类•继承就是从一个类中继承它的特性到另一个类中。–被继承的类叫做基类,–继承基类的类称为派生类。–派生类可以继承基类的特性并添加自己的独特特性。定义派生类classderivedclass:publicbassclass{}–在后面的花括号中写出derivedclass中所有非继承的特性。–public关键字所处的位置用于写访问修饰符,允许省略不写。–访问形饰符只能是public,private或者protected之一–默认为private。类的继承类继承自两个以上的基类继承的访问控制•基类各个成员的访问修饰符(private,public和protected)以及派生类以什么方式继承基类(也是private,public和protected)决定了基类的成员是否允许派生类的访问。–如果派生类以public的方式继承基类,那么,基类的所有公有数据成员都会成为派生类的公有数据成员,而基类的私有数据成员仍然保持它的私有特性,也就是说只能被基类定义的成员函数所访问,而不能被派生类的任何成员函数所访问。同样,基类的所有私有成员函数派生类也不能够访问。–如果以private的方式继承一个类,那么基类的所有数据成员都会变成派生类的私有成员,不论这个成员在基类中是私有的还是公有的。这时派生类的成员仍然可以访问它们,但是程序其他部分的代码不能够访问它们。用公有方式继承基类的私有数据成员的方法计算一个矩形的面积用私有方式继承基类的私有数据成员的方法计算一个矩形的面积关于protected•被声明为protected的成员在类的内部是公有的,但是在类的外部则是私有的。–派生类中可以直接访问基类的受保护的成员,但是在类的外部则不可以直接访问它们,因为在类的外部认为它们是私有的成员。•如果派生类以public的方式继承基类,那么基类的protected成员在派生类中仍然是protected类型•如果派生类以private的方式继承基类,那么基类的protected成员在派生类中就变成private类型。使用protected成员派生类的构造函数和析构函数•由于在派生类中允许存在基类中没有的成员数据,因此,在C++中,使用基类的构造函数为基类的数据成员初始化,而使用派生类的构造函数为派生类中新定义的数据成员初始化。•如果基类没有显式定义一个构造函数用于对成员数据进行初始化的话,那么就用派生类的构造函数对它们进行初始化。计算一个立方体的体积调用基类的构造函数派生类和基类构造函数与析构函数的执行次序多重派生•在类的继承过程中,使用一个以上的基类派生出一个派生类。•方法是在定义好基类之后,在定义派生类时把基类用逗号隔开多重派生重载•函数重载•运算符重载函数重载•函数重载是指同一个函数名可以对应多个函数的实现,每一种实现对应着一个函数,这些函数具有相同的名字,但是参数的类型不一样,或者参数的个数不相同。这就是函数重载。•在调用一个函数时如何确定使用哪个函数实现呢?–编译器会根据函数调用时参数的个数和参数的数据类型来确定使用哪个函数来实现。因此在编写重载函数的时候要求各个函数的参数个数不同,或者参数的数据类型不同,这样才能相互区分开来,否则将不能实现重载。参数类型不同的函数重载参数个数不同的函数重载运算符重载•C++允许通过类来重载运算符让运算符实现新的功能。•普通的运算符只能够对普通数据类型的数据进行运算,而使用运算符重载则可以实现类之间的运算,从而将新的数据类型无缝地集成到程序设计环境中来。使用成员运算符函数实现重载•使用运算符重载,可以为一个普通的运算符赋予一个新的含义•为了能够重载运算符,就需要在类中定义一个operator函数,称为成员运算符函数,方法是:–类名::operator运算符(参数表)使用运算符重载实现二维空间坐标的加和与赋值操作数的顺序•在重载运算符时,必须注意操作数的顺序。•a+b和b+a的值是一样的,但是如果重载“–”运算符,那么a–b和b–a的结果就应该不同。在dtwo类中重载++运算符使用友元函数实现重载•由于友元函数并不是类真正的成员函数,所以不可以使用this指针来传递参数,因此要使用友元函数实现一元运算符的重载就需要让友元成员运算符函数带一个参数,而如果重载二元运算符就需要让它的友元成员运算符函数带两个参数使用友元函数重载运算符*多态性•指向基类的指针和指向派生类的指针•虚函数•纯虚函数和抽象类多态性•C++实现多态性的基础是继承和指向基类的指针,而实际上多态性是通过虚函数实现的。指向基类的指针和指向派生类的指针•如果定义一个指针p指向一个类a,这个类又派生出新的类b,那么p就是指向基类的指针,并且这个指针还可以指向类b的对象。•当指向基类的指针指向派生类对象的时候,通过这个指针只能访问到派生类对象中从基类继承来的那些成员,不能访问派生类中新增加的成员。使用指向基类的指针访问派生类对象虚函数•虚函数是指在一个类中被声明为virtual的成员函数,这个函数允许在这个基类的一个或多个派生类中重新定义。•在所有的这些类中,虚函数都有相同的名字,并且有完全相同的参数数量和类型,但是具有不同的实现方式。•如果定义了一个指向基类的指针p,就可以使用p调用不同派生类的虚函数,由于所有虚函数的名字相同,参数的个数和类型也都一样,因此实现了面向对象程序设计所提倡的“一个接口多种方法”的多态性。实现虚函数使用虚函数实现多态性纯虚函数和抽象类•纯虚函数只有函数的声明,却没有函数的实现,因此所有派生类都必须定义自己的版本来实现这个虚函数,而不能继承基类的虚函数实现。•拥有一个或一个以上虚函数的类就是抽象类。•定义虚函数的方法如下:–virtual数据类型函数名(形式参数列表)=0;定义抽象类和纯虚函数
本文标题:C++教程,从入门到精通,chap-07
链接地址:https://www.777doc.com/doc-3972278 .html