美文网首页
C++中多态实现的例子

C++中多态实现的例子

作者: 九楼记 | 来源:发表于2022-06-18 23:37 被阅读0次

先看一段代码

#include <iostream>
using namespace std;
class Base {
public:
    void Run() {
        cout << "Base run" << endl;
    }
};

class Derive : public Base {
public:
    void Run() {
        cout << "Derive run" << endl;
    }
};

void CallFunc(Base *p) {
    p->Run();
}

int main() {
    Base *p = new Base();
    Derive *d = new Derive();
    CallFunc(p);
    CallFunc(d);
    delete p;
    delete d;
    return 0;
}

实际运行结果,都是调用Base的Run方法,预期是p调用Base,d调用Dervie。
原来具体执行哪个函数,由CallFunc的参数决定。
可以用下面的代码验证

#include <iostream>
using namespace std;
class Base {
public:
    void Run() {
        cout << "Base run" << endl;
    }
    virtual void Print() {}
};

class Derive : public Base {
public:
    void Run() {
        cout << "Derive run" << endl;
    }
};

void CallFunc(Derive *p) {
    p->Run();
}

int main() {
    Base *p = new Base();
    Derive *d = new Derive();
    CallFunc(dynamic_cast<Derive*>(p));
    CallFunc(d);

    delete p;
    delete d;
    return 0;
}

那怎么可以达到我们的预期效果呢?

方法1:虚函数

#include <iostream>
using namespace std;
class Base {
public:
    virtual void Run() {
        cout << "Base run" << endl;
    }
};

class Derive : public Base {
public:
    void Run() {
        cout << "Derive run" << endl;
    }
};

void CallFunc(Base *p) {
    p->Run();
}

int main() {
    Base *p = new Base();
    Derive *d = new Derive();
    CallFunc(p);
    CallFunc(d);

    delete p;
    delete d;
    return 0;
}

方法2:函数模版

#include <iostream>
using namespace std;
class Base {
public:
    void Run() {
        cout << "Base run" << endl;
    }
};

class Derive : public Base {
public:
    void Run() {
        cout << "Derive run" << endl;
    }
};

void CallFunc(Base *p) {
    p->Run();
}

template <typename T>
void CallFunc2(T *p) {
    p->Run();
}

int main() {
    Base *p = new Base();
    Derive *d = new Derive();

    CallFunc2<Base>(p);
    CallFunc2<Derive>(d);

    delete p;
    delete d;
    return 0;
}

相关文章

  • C++中多态实现的例子

    先看一段代码 实际运行结果,都是调用Base的Run方法,预期是p调用Base,d调用Dervie。原来具体执行哪...

  • Swift 多态实现探究

    多态 父类指针指向子类对象 Swift 中多态的实现类似于 c++ 中的虚表 OC 多态实现利用的是 Runtim...

  • c++多态例子

    1.源码实现 2.编译源码 3.运行及其结果

  • 深刻剖析之c++博客文章

    三大特性 封装、继承、多态 多态 C++ 虚函数表解析C++多态的实现原理 介绍了类的多态(虚函数和动态/迟绑定)...

  • C++ 多态的实现和原理

    多态的实现虚函数原理 一、在编译期间实现多态 多态是指在不同的条件下表现出不同的状态,C++中通过重载函数的方法可...

  • Go interface详解

      如Go method中提及,Golang没有明确支持多态,但是通过其他手段可以实现类似C++中的多态特性,即本...

  • C++泛型与多态(3):类模板特化

    C++的类没有重载,所以类只能依靠特化来实现多态。 例子:斐波那契数列 斐波那契数列(Fibonacci Numb...

  • C++编译期多态和运行期多态

    C++多态有多种实现方式,在面对对象编程时,采用的是运行期多态,也称动态多态。在泛型编程中,多态基于模板的具现化与...

  • Cpp7 C++的多态实现 -- 虚表

    Cpp7 C++的多态实现 -- 虚表 多态的实现原理 总结:1. 当我们在类中定义虚函数时,就会产生虚表2. 多...

  • 实现golang语言的多态

    如何实现golang语言的多态? C++里面有多态是其三大特性之一,那么golang里面的多态我们该怎么实现? g...

网友评论

      本文标题:C++中多态实现的例子

      本文链接:https://www.haomeiwen.com/subject/hiilvrtx.html