首页 > 其他 > 详细

OOP 多态/虚函数

时间:2019-04-08 15:04:39      阅读:158      评论:0      收藏:0      [点我收藏+]
//  main.cpp
//  OOP
//  虚函数允许继承层次结构中绝大多数特定版本的成员函数被选择执行,虚函数使多态成为可能。
//  Created by mac on 2019/4/8.
//  Copyright ? 2019年 mac. All rights reserved.
#include <iostream>
using namespace std;
class Class1{
public:
    Class1(){}
    ~Class1(){}
    virtual void f(){
        cout<<"Function f() in Class1"<<endl;
    }
    void g(){
        cout<<"Function g() in Calss1"<<endl;
    }
private:
    int a;
};

//写个类模版
template <class genType>
class genClass {
public:
    genClass(){}
    ~genClass(){}
    virtual void f(){
        cout<<"Function f() in Class2"<<endl;
    }
    void g(){
        cout<<"Function g() in Class2"<<endl;
    }
private:
    genType a;
};

class Class3{
public:
    Class3(){}
    ~Class3(){}
    //写个函数模版
    template <class genType>
    void h(genType a) {
        cout<<"Function h() in Class3"<<endl;
    }
private:
    
};


int main(int argc, const char * argv[]) {
    Class1 object1,*p;
    genClass<int> object2;
    Class3 object3,*q=&object3;
    p=&object1; //P指向object1
    p->f();
    p->g();
    
    p=(Class1 *)&object2;// p指向object2 并且对类指针进行强制类型转换
    p->f();
    p->g();
    
    p=(Class1*)&object3; //p指向object3 并且对类指针进行强制类型转换
    
    //p->f();//编译成功,运行出错。
    p->g(); // 输出: Function g() in Calss1
   // p->h(); //编译出错,在Class1 中找不到h
    
    //测试一下类Class3中的函数模版怎么用
    q->h(3);  // 输出: Function h() in Class3
    q->h("jjjdscdjd"); // 输出: Function h() in Class3
    return 0;
}

运行结果

Function f() in Class1
Function g() in Calss1
Function f() in Class2
Function g() in Calss1
Function g() in Calss1
Function h() in Class3
Function h() in Class3
Program ended with exit code: 0

Tips

  • 对于编译器来说,是否在Class3中定义了h()并不重要(不管是否为虚函数)。
  • 在C++中,动态绑定是通过将成员函数声明为virtual来实现的。

OOP 多态/虚函数

原文:https://www.cnblogs.com/overlows/p/10670405.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!