请具体举实例说明类的继承的作用,以及动态多态的作用。如题,以及什
如题,以及什么时候必须用以上两种呢,也就是问,以上两种最适合解决什么问题呢,最好能有实例。
类是面象对象编程(OOP)的基本概念。OOP将数据和函数封装到称为类的玩意中。 继承是复用的一种形式,实现这种形式的方法是从现有的类建立新类,新类继承了现有类的方法和属性,同时新类又可以定义自己的方法和属性。软件复用缩自短了开发时间。继承的魅力在于能够添加基类没有的特点从而对基类进行改进。 例如:在VC开发环境中有类库(MFC,ATL),他们就是已经编好了的类,你在开发软件时可以对类库中的类进行扩展、改进,这在实际的开发中经常用到。做法就是以类库中的类为基类构造自己的类。说白了,继承是面向对象的基本特征,其最大的用处是可以软件复用。 多态是比较高级的特性,另一个高级特性是模板,这两个在构造复杂系统时才用得上,如MFC类库中大量运用了多态特性,而ATL将模板运用得淋漓尽致。然而我们在学习C++之初对多态、模板并不重视,而将大量精力放在了指针、继承、重载等之上。当然这是合理的,因为指针、继承等是最基本的知识。 和你一样,在学习C++之初对多态没有正真理解,直到学了MFC后我才真正理解了多态有如些大的用途,C++是如此有魅力,而学了ATL之后我才明白原来模板可以这么用。下面我给你介绍一下多态吧,分享一下,但我不是老师,讲得不一定很好。 多态分为模板的静态多态表现和类继承的动态绑定两种. C++编译器在编译的时候,要确定每个对象调用的函数的地址,这称为早期绑定。与之对应的就是晚绑定。动态多态就是其中一种。 动态多态主要体现在虚函数的调用。在C++中,虚函数的调用使用的是动态绑定,也有人说是晚绑定、运行时绑定,也就是在程序运行时才决定调用的函数。这是通过类的虚表实现的(了解即可) 请注意,C++中多态的实现只在通过基类指针调用虚函数时才会实现。 关于多态下面举个例子就明白了: 如我们定义了一个动物类,动物都有一个共同的行为就是呼吸,那么把呼吸定义在基类中(这很好理解)。 在设计软件时我们可能会基于程序的灵活性或算法特殊要求而使用基类指针来调用派生类的方法。 比如基于上述类我们开发一个展示动物呼吸的程序,定义了几百种动物并实现了每种动物的breathe方法,使用者通过鼠标点击决定看哪一种动物的呼吸方式。 设计时考虑到,使用者并不是每次都想看完这几百种动物的呼吸,所以我们没有必要预先产生各种动物的对象,而只要在使用者点了某种动物后使用new操作符动态创建该对象即可,这样可以简化程序设计和节省内存空间。 class animal { ... virtual void breathe() //注意这是虑函数 { cout<<"animal breathe"<breathe(); delete pAn; } } 当用户选鱼时输出:fish breathe 当用户选猫时输出:cat breathe 但是如果你将基类的breathe函数virtual申明除掉,那么不管你怎么选都是输出 animal breathe 因为你一定要记住:C++中多态的实现只在通过基类指针调用虚函数时才会实现 你问:“如题,以及什么时候必须用以上两种呢” 我认为没有必须,一个问题可用多种方法实现,在使用多态能更好的设计算法时就使用多态,在需要软件复用时就用继承。但要记住一点:C++中使用多态一定要用基类指针,并且一定要在基类中定义虚函数。(可能你想问的是个) 不知明白否,有问题给我发消息。 祝你成功。