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()函数,实现多态。