C++静态的面向对象编程

#include <iostream>

using namespace std;

template <class T>
class CTest : public T
{
    void
    SomeMethod()
    {
        T *pT = static_cast<T *>(this);
        pT->BaseMethod();
    }
};

class CBase
{
public:
    CBase(){};
    ~CBase(){};

    void BaseMethod()
    {
        cout << "BaseMethod   in   Base " << endl;
    }
};

class CMath : public CBase
{
public:
    CMath(){};
    ~CMath(){};

    void BaseMethod()
    {
        cout << "BaseMethod   in   Math " << endl;
    }
};

int main()
{
    CTest<CBase> *pTest = new CTest<CBase>;
    pTest->BaseMethod();

    CTest<CMath> *p2Test = new CTest<CMath>;
    p2Test->BaseMethod();
}

使用模板来实现:静态的面向对象的方法

1、使用虚函数,动态的多态(通过虚函数,在运行时通过虚函数表指针,通过索引找到对应函数,然后进行调用)
2、使用模板,静态的多态(针对某些希望定义为static的函数,当你希望能在基类抽象方法中根据当前对象具体类型来使用子类相应static函数时)
3、利用模板实现静态的多态。 —— 使用模板定义接口,类型参数定义实现
4、由于静态多态是在编译期完成的,因此效率较高,编译器也可以进行优化;有很强的适配性和松耦合性,比如可以通过偏特化、全特化来处理特殊类型;最重要一点是静态多态通过模板编程为C++带来了泛型设计的概念,比如强大的STL库。
5、静态多态就是在系统编译期间就可以确定程序执行到这里将要执行哪个函数,例如:函数的重载,对象名加点操作符执行成员函数等,都是静态多态,其中,重载是在形成符号表的时候,对函数名做了区分,从而确定了程序执行到这里将要执行哪个函数,对象名加点操作符执行成员函数是通过this指针来调用的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值