C教程从入门到精通chap07

上传人:gb****c 文档编号:243023125 上传时间:2024-09-14 格式:PPT 页数:37 大小:161KB
返回 下载 相关 举报
C教程从入门到精通chap07_第1页
第1页 / 共37页
C教程从入门到精通chap07_第2页
第2页 / 共37页
C教程从入门到精通chap07_第3页
第3页 / 共37页
点击查看更多>>
资源描述
Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,第7章 继承、重载和多态性,继承,重载,多态性,继承,基类和派生类,继承的访问控制,派生类的构造函数和析构函数,多重派生,基类和派生类,继承就是从一个类中继承它的特性到另一个类中。,被继承的类叫做基类,,继承基类的类称为派生类。,派生类可以继承基类的特性并添加自己的独特特性。,定义派生类,class derivedclass:public bassclass,在后面的花括号中写出,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的值是一样的,但是如果重载“”运算符,那么ab和ba的结果就应该不同。,在dtwo类中重载+运算符,使用友元函数实现重载,由于友元函数并不是类真正的成员函数,所以不可以使用this指针来传递参数,因此要使用友元函数实现一元运算符的重载就需要让友元成员运算符函数带一个参数,而如果重载二元运算符就需要让它的友元成员运算符函数带两个参数,使用友元函数重载运算符*,多态性,指向基类的指针和指向派生类的指针,虚函数,纯虚函数和抽象类,多态性,C+实现多态性的基础是继承和指向基类的指针,而实际上多态性是通过虚函数实现的。,指向基类的指针和指向派生类的指针,如果定义一个指针p指向一个类a,这个类又派生出新的类b,那么p就是指向基类的指针,并且这个指针还可以指向类b的对象。,当指向基类的指针指向派生类对象的时候,通过这个指针只能访问到派生类对象中从基类继承来的那些成员,不能访问派生类中新增加的成员。,使用指向基类的指针访问派生类对象,虚函数,虚函数是指在一个类中被声明为,virtual,的成员函数,这个函数允许在这个基类的一个或多个派生类中重新定义。,在所有的这些类中,虚函数都有相同的名字,并且有完全相同的参数数量和类型,但是具有不同的实现方式。,如果定义了一个指向基类的指针,p,,就可以使用,p,调用不同派生类的虚函数,由于所有虚函数的名字相同,参数的个数和类型也都一样,因此实现了面向对象程序设计所提倡的“一个接口多种方法”的多态性。,实现虚函数,使用虚函数实现多态性,纯虚函数和抽象类,纯虚函数只有函数的声明,却没有函数的实现,因此所有派生类都必须定义自己的版本来实现这个虚函数,而不能继承基类的虚函数实现。,拥有一个或一个以上虚函数的类就是抽象类。,定义虚函数的方法如下:,virtual,数据类型 函数名(形式参数列表)=0;,定义抽象类和纯虚函数,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 大学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!