14虚函数讲解_精品.pptxVIP

  1. 1、本文档共25页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
1、虚函数实现多态的条件2、类成员函数的指针与多态性3、虚析构函数4、纯虚函数和抽象类14.1 虚函数实现多态的条件? 被virtual关键字修饰的成员函数,就是虚函数。虚函数的作用就是实现多态性——以共同的方法,对不同的对象采取不同的策略。14.1 虚函数实现多态的条件? 1. 虚函数的定义? 虚函数只能是类中成员函数,且不能是静态的。在成员函数定义或声明前面加上关键字virtual,即定义了虚函数:class 类名 { //类体…virtual 返回类型 函数名(形式参数列表); //虚函数…};class Point { //Point类表示平面上的点…virtual double area(); //虚函数声明virtual double volumn() { return 0; } //虚函数定义};14.1 虚函数实现多态的条件? 需要注意,virtual只在类体中使用。? 当在派生类中定义了一个同名的成员函数时,只要该成员函数的参数个数、参数类型以及返回类型与基类中同名的虚函数完全一样,则派生类的这个成员函数无论是否使用virtual,它都将成为一个虚 函数。? 程序员习惯给派生类的同名函数也加上virtual,便于阅读理解。? 利用虚函数,可在基类和派生类中使用相同的函数名定义函数的不同实现,从而实现“一个接口,多种方式”。当用基类指针或引用 对虚函数进行访问时,系统将根据运行时指针或引用所指向或引用的实际对象来确定调用对象所在类的虚函数版本。14.1 虚函数实现多态的条件? 关键字virtual指示C++编译器在调用虚函数时进行动态联编。这种多态性是程序运行到相应的语句时才动态确定的,所以称为运行时 的多态性。? 不过,使用虚函数并不一定产生多态性,也不一定使用动态联编。例如,在调用中对虚函数使用成员名限定,可以强制C++对该函数 的调用使用静态联编。14.1 虚函数实现多态的条件【例14.1】#include iostreamusing namespace std;class Point { //Point类表示平面上的点45678 };double x,y; //坐标值 public:Point(double x1=0,double y1=0) : x(x1),y(y1) { } virtual double area() { return 0; } //虚函数9 class Circle:public Point { //Circle类表示ouble r; //半径 public:Circle(double x,double y,double r1):Point(x,y),r(r1) { } virtual double area() { return 3.14*r*r; } //虚函数14 };14.1 虚函数实现多态的条件15 int main() 16 {171819202122 }Point a(2.5,2.5); Circle c(2.5,2.5,1); Point *pc=c;coutCircle area=pc-area()endl;//动态联编 coutCircle area=pc-Point::area()endl; //静态联编return 0;运行结果:Circle area=3.14 Circle area=014.1 虚函数实现多态的条件? 2. 虚函数实现多态的条件? ①类之间的继承关系满足赋值兼容性规则;? ②改写了同名的虚函数;? ③根据赋值兼容性规则使用指针(或引用)。? 满足前两条并不一定产生动态联编,必须同时满足第3条才能保证实现动态联编。14.1 虚函数实现多态的条件? 第3条分为两种情况:? (1)使用基类指针(或引用)访问虚函数。例如: Point *p=new Circle; //基类指针指向派生类 coutp-area(); //动态联编? (2)把指针(或引用)作为函数参数,这个函数不一定是类的成员函数,可以是普通函数,而且可以重载。例如:void fun(Point *p){ coutp-area(); } //动态联编14.2 类成员函数的指针与多态性? 在派生类中,当一个指向基类成员函数的指针指向一个虚函数,并且通过指向对象的基类指针(或引用)访问这个虚函数时,仍将发生多态性。14.2 类成员函数的指针与多态性【例14.2】#include iostreamusing namespace std;class Base { public: virtual void print() { coutBaseendl; } //虚函数 };class Derived: public Base { public: void p

文档评论(0)

有谱教育资源分享 + 关注
实名认证
文档贡献者

热爱生活,分享教育专业文档! 所有资料均来源于互联网公开下载资源,如有侵权,请联系管理员及时删除。

1亿VIP精品文档

相关文档