`

动静多态

阅读更多
由于继承||虚函数在运行期进程处理,这种多态叫动多态。
模板允许我们使用单一的泛型标记,来关联不同的特定行为:但这种关联是在编译期进行处理的,这些借助于模板的多态称为静多态
#include<iostream>
using namespace std;

class A{
public:
    virtual void fun()=0;
};

class A1:public A{
public:
    void fun(){
        cout << "A1()" << endl;
    }
    int size()const{
        return 10;
    }
};

class A2:public A{
public:
    void fun(){
        cout << "A2()" << endl;
    }
    int size()const{
        return 5;
    }
};

template<typename A>
void myFun(A t)
{
    t.fun();//根据对象的类型调用相应的fun()
}

//静多态
template<typename Aa1,typename Aa2>
int distance(const Aa1& a1,const Aa2& a2)
{
    int sa = a1.size();
    int sb = a2.size();
    return sa-sb;
}

int main(){
    A1 a1;
    A2 a2;
    myFun(a1);
    myFun(a2);
    cout << distance(a1,a2);
}

A1()
A2()
5


通过继承实现的多态是绑定的和动态的。
通过模板实现的多态是非绑定的和静态的。
绑定与非绑定的区别是接口是否有预先确定,动静态:一个是运行期绑定一个是编译期
分享到:
评论

相关推荐

    黄庭坚行书书法特点.pdf

    黄庭坚都将字中的三撇蹙写和上收为三点,这种异乎寻常的处理,使字体结构中的“展”与“蹙”形成对比,长笔短画,多姿多态,使这些字的笔画多变化和不重复。 五、动静结合,和谐统一:黄庭坚对一些下面带有四点的字...

    JAVA开发五年程序员简历模版

    1. **Java编程基础**:具备扎实的编程基础,精通Java语言,这包括对语言特性的深入理解,如类、对象、继承、多态等。 2. **JVM与内存模型**:熟悉JVM(Java虚拟机)的工作原理,包括内存区域(堆、栈、方法区等),...

    Java3年后端工程师简历模板

    深入理解面向对象编程(OOP)原则,如封装、继承和多态,以及面向切面编程(AOP)思想,如Spring框架中的AOP代理。 2. **开发工具与框架**:熟练使用STS(Spring Tool Suite)、Navicat(数据库管理工具)、Visual ...

    Java面试题库,免费下载!

    2. **Java基础**:涵盖变量、数据类型、运算符、流程控制、异常处理、封装、继承、多态等核心概念。面试中可能会考察深入理解类与对象、内存管理、构造器、静态与非静态成员等知识点。 3. **JVM**:Java虚拟机是...

    java后端开发面试题总结

    - **Java语法**:包括类、对象、封装、继承、多态等面向对象编程的基本概念,以及异常处理、数据类型、流程控制等。 - **集合框架**:List(ArrayList、LinkedList)、Set(HashSet、TreeSet)、Map(HashMap、...

    XXX-JAVA开发工程师-2年经验简历模板

    熟练掌握Java基础知识包括但不限于类与对象的概念、继承与多态的应用、异常处理机制、集合框架(如List、Set、Map等)的使用等。 - **逻辑思维能力**:在编程过程中,具备良好的逻辑思维能力对于解决复杂问题至关...

Global site tag (gtag.js) - Google Analytics