OOP 多态/虚函数

//  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来实现的。

猜你喜欢

转载自www.cnblogs.com/overlows/p/10670405.html
OOP
今日推荐