OOP特性 多态

OOP特性 多态

静态多态(编译时期)

函数重载、函数模板与类模板

函数重载

调用在编译阶段就编译好的函数

bool compare(int a, int b){
    
    }
bool compare(double a, double b){
    
    }
compare(2,3);
compare(2.0,3.0);
函数模板

在函数调用点,进行实参类型推导并从模板实例化函数(拷贝一份函数代码)



template<typename T>
bool compare(T a, T b){
    
    }
compare(2,3);
compare(2.0,3.0);

动态多态(运行 时期)

在继承结构中,基类指针(引用)指向派生类对象,通过基类指针(引用)调用同名覆盖方法(虚函数)。此时,基类指针(引用)指向那个派生类对象,就会调用那个派生类对象的同名覆盖方法,这称为多态。

举例
#include <iostream>
#include <typeinfo>
using namespace std;

class Base {
    
    

public:
    Base(int data) : ma_(data) {
    
    }
    virtual void show() {
    
     cout << "Base::show()" << endl; }
    void show(int) {
    
     cout << "Base::show(int)" << endl; }
    virtual ~Base() {
    
     cout << " ~Base()" << endl; }
protected:
    int ma_;
};

class Drived : public Base {
    
    
public: 
    Drived(int data):Base(data), mb_(data){
    
    }
    void show() {
    
     cout << "Drived::show()" << endl; }
    ~Drived() {
    
     cout << "  ~Drived()" << endl; }
private:
    int mb_;
};

int main()
{
    
    
    Base* p = new Drived(10);
    p->show(); 
}

上述代码中,基类指针指向派生类对象并调用同名覆盖函数,此时调用的函数为派生类的void show()函数,实现多态。

猜你喜欢

转载自blog.csdn.net/weixin_43459437/article/details/143291139