`

多态性与虚函数

    博客分类:
  • c++
阅读更多
晚捆绑(late binding=动态绑定(dynamic binding)=运行时绑定(runtime binding)

如果一个函数在基类被声明为virtual,那么在所有的派生类中它都是virtual的。在派生类中virtual函数的重定义通常称为重写

纯虚函数禁止对抽象类的函数以值方式调用。这也是防止对象切片(object slicing)的一种方法。通过抽象类,可以保证在向上类型转换期间总是使用指针或引用,如果使用值则总是调用的是基类的实现

构造函数是不能为虚函数的,但析构函数能够且常常必须是虚的。不把析构函数设为虚函数是一个隐匿的错误,因为它常常不会对程序有直接的影响。但要注意它不知不觉地引入存储泄漏(关闭程序时内在未释放)

删除一个void指针并不调用函数,所以窗口并不负责清除它的对象

#include<iostream>
#include<vector>
using namespace std;

class Rodent{
public:
    virtual void fun()const=0;
    virtual ~Rodent(){}
};

class Mouse:public Rodent{
public:
    ~Mouse(){
        cout << "~Mouse()" << endl;
    }

    void fun()const{
        cout << "M" << endl;
    }
};

class Test:public Mouse{
public:
    void fun()const{
        cout << "Test" << endl;
    }
};

class Gerbil:public Rodent{
public:
    ~Gerbil(){
        cout << "~Gerbil()" << endl;
    }

    void fun()const{
        cout << "G" << endl;
    }
};

class Hamster:public Rodent{
public:
    ~Hamster(){
        cout << "~Hamster()" << endl;
    }

    void fun()const{
        cout << "H" << endl;
    }
};


class BlueHamster:public Hamster{
public:
    void fun()const{
        cout << "B" << endl;
    }
};

void testFun(Rodent * r){
    r->fun();
}

int main(){
    Mouse *m = new Mouse;
    Gerbil *g = new Gerbil;
    Hamster *h = new Hamster;
    vector<Rodent *>v;
    v.push_back(m);
    v.push_back(g);
    v.push_back(h);
    for(int i=0;i<sizeof(v)/sizeof(v[0]);i++){
        v[i]->fun();
        delete v[i];
    }
    Test *test = new Test;
    testFun(test);
}
result:
M
~Mouse()
G
~Gerbil()
H
~Hamster()
Test
分享到:
评论

相关推荐

    c++多态性与虚函数练习题

    ### C++多态性与虚函数知识点解析 #### 一、多态性的概念 多态性是面向对象编程的一个核心特性,它允许我们通过基类的接口来操作派生类的对象。这种特性使得代码更加灵活且易于扩展。在C++中,多态性主要通过虚函数...

    c++课件 多态性与虚函数

    c++课件 多态性与虚函数

    C++多态性与虚函数

    第9章 多态性与虚函数 本章学习要求: 虚函数 多态性 静态与动态联编 9.1 多态性的概念 9.2 虚函数 9.3 静态绑定与动态绑定 9.4 纯虚函数和抽象类

    多态性与虚函数习题

    #### 二、虚函数与多态性 在C++中,通过定义虚函数来实现多态性。虚函数允许在基类中声明,并在派生类中重新定义,这样就可以根据实际的对象类型调用不同的实现。 ##### **1. 运行时多态性** - **定义**: 运行时...

    C++实验六 多态性和虚函数的应用 课程 实验报告

    在C++编程语言中,多态性和虚函数是面向对象编程的重要特性,它们允许程序员创建灵活且可扩展的代码结构。本次实验旨在深入理解和熟练运用这两个概念。实验报告的标题和描述表明,这是一个关于C++实验,特别是针对多...

    面向对象程序设计之多态性与虚函数推选PPT文档.ppt

    面向对象程序设计之多态性与虚函数 面向对象程序设计中,多态性是指同一个函数或操作符在不同情況下的不同行为。多态性是面向对象程序设计的核心概念之一,它允许在不同的情況下执行不同的操作。 在C++语言中,多...

    C++实验 多态性与虚函数

    C++语言编写面向对象程序,实现柱体体积和表面积的计算...3.从抽象类 Plane 派生出具体类(如长方形类 Rectangle、圆形类 Circle 和三角形类triangle),根据实际情况,覆盖基类 Plane 的纯虚函数 area 和 girth。

    多态性与虚函数习题.docx

    派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型。 5. 实现动态联编: 要实现动态联编,必须使用基类指针或对象引用来调用虚函数。 6. 抽象类的性质: 抽象类的性质是不能直接创建对象,属于抽象类...

    多态性与虚函数PPT学习教案.pptx

    《多态性与虚函数》 多态性(Polymorphism)是面向对象编程的核心特性之一,它允许我们使用同一接口来调用不同对象的方法,从而实现代码的灵活性和可扩展性。在C++中,多态性有两种主要形式:静态多态性和动态多态...

    C++程序设计讲义 多态性与虚函数

    ### C++程序设计讲义:多态性与虚函数 #### 12.1 多态性的概念 多态性是面向对象编程的核心特性之一,它允许程序员使用一个通用的接口来表示不同的类实例,从而使得代码更加灵活、可扩展且易于维护。在C++中,多态...

    第六章多态性与虚函数PPT学习教案.pptx

    第六章主要讲解了多态性与虚函数的概念及其在编程中的应用。多态性是面向对象编程的一个核心特征,它允许不同的对象对同一消息(函数或方法)有不同的响应。多态性分为静态多态性和动态多态性。 静态多态性主要体现...

    C++实验之多态性和虚函数

    多态性和虚函数

    C++ 程序设计:第六章 多态性与虚函数.ppt

    多态性与虚函数

    C++第八章 多态性与虚函数(二).ppt

    C++多态性与虚函数(二) C++语言中多态性的实现方式有两种:编译时多态性和运行时多态性。编译时多态性通过函数和运算符的重载来实现,而运行时多态性通过继承和虚函数来实现。 8.1 普通成员函数重载 C++语言中...

    C++ 面向对象程序设计--多态性与虚函数.ppt

    C++ 面向对象程序设计--多态性与虚函数 C++ 面向对象程序设计--多态性与虚函数 C++ 面向对象程序设计--多态性与虚函数

    多态性与虚函数讲稿.pptx

    多态性与虚函数讲稿.pptx

    多态性与虚函数PPT课件.pptx

    多态性与虚函数PPT课件.pptx

    第7章 多态性与虚函数.ppsx

    第7章 多态性与虚函数.ppsx

Global site tag (gtag.js) - Google Analytics