多态 与 虚函数

来源:互联网 发布:淘宝产品模板详情代码 编辑:程序博客网 时间:2024/06/08 08:22

虚函数

运用虚函数时,使用基类型的指针, 它指向哪个派生类的对象, 就可以通过它访问那个派生类对象的与基类虚成员函数同名的函数。


virtual 字眼只在声明时出现,不在函数实现的时候出现。


像在下面的程序中并没有给出派生类虚函数的声明, 但系统会根据以下规则来进行判断:

①该函数是否与基类虚函数有相同名称

②该函数是否与基类的虚函数有相同的参数个数及相同的对应参数类型

③该函数是否与基类的虚函数有相同的返回值或者满足赋值兼容规则的指针、引用型的返回值

若满足以上三个规则,就会自动确定为虚函数。

这时,派生类的虚函数覆盖基类的虚函数。派生类的虚函数还会隐藏基类中同名函数的所有其他重载形式。


用指向派生类对象的指针仍然可以调用基类中被派生类覆盖的成员函数,方法是使用::限定。如p->base::display();





6-1 多态性与虚函数


Time Limit: 1000MS Memory Limit: 65536KB

Submit Statistic

Problem Description


通过本题目的练习可以掌握多态性的概念和虚函数的定义和使用方法

要求定义一个基类Pet,它有一个成员函数Speak()用于输出pet的叫声。;派生类Dog和Cat从基类Pet派生而来。他们从基类继承并重新改写了speak()函数,分别用于输出Dog类和Cat类的叫声。要求利用虚函数编写代码,使得程序能够输出下面的内容。

Input




Output


输出数据共有3行,本题目要求输出内容必须与示例中的相同。

Example Input



Example Output

How does a pet speak ?
miao!miao!
wang!wang!

Hint



Author

黄晶晶



#include<iostream>using namespace std;class Pet{public:    virtual void speak()    {        cout<<"How does a pet speak ?"<<endl;    }};class Dog: public Pet{public:    void speak()    {        cout<<"wang!wang!"<<endl;    }};class Cat: public Pet{public:    void speak()    {        cout<<"miao!miao!"<<endl;    }};int main(){    Pet pet;    Dog dog;    Cat cat;    Pet *p;  //定义基类型的指针    p = &pet;  //指向派生类    p->speak();    p = &cat;    p->speak();     p = &dog;    p->speak();    return 0;}


原创粉丝点击