C++中泛型编程与面向对象编程

1.  面向对象:封装(数据抽象)是基础,继承是手段,多态是目的;泛型编程:参数化类型(概念抽象)是基础,模板是手段,通用是目的
2.  面向对象是运行时问题空间的多态,泛型编程是编译时算法空间的多态
3.  OO以Type为中心,GP以Concept为中心,而Concept完全独立于Type;OO的type是显式定义的,type之间的关系也是显式定义的,是语言支持的 ;GP的Concept是由算法隐式定义的,Concept之间的关系,是无法用目前的C++语法直接表达的;Concept的Model完全可以是毫无关系的Type,refinement独立于inheritence,original concept与其refinement concept的model之间可以毫无关系
4.  以GP写就的算法,自动满足最小接口原则,无需为其参数定义形式化的类型;在OO中,这种形式化的Type具有的操作往往不是所有用到该Type的算法都会用到的
5.  OOP支持二进制组件形式的复用,GP支持源码层级的复用;与二进制码相比较,源码天生具有更多信息和更高级别,所以泛型编程支持更丰富的构件,但其代价是较弱的执行期动态性;你无法通过STL完成CORBA所能完成的功能,反之亦然,两种技术相互补充

——面向对象编程所依赖的多态性称为运行时多态性。
——泛型编程所依赖的多态称为编译时多态性或参数式多态性。

C++中多态分类:
 1)非参数化多态(Ad-hoc polymorphism):
  a)函数重载(Function Overloading)
  b)运算符重载(Operator Overloading)
2)参数化多态(Parametric polymorphism)
  c)模板(Template)
 
泛型编程的代表就是STL
下面的一个程序是结合了泛型编程与面向对象编程:

C++中泛型编程与面向对象编程View Code

#include <iostream>
#include <vector>
#include <cstdlib>
using namespace std;
class A{
    public:
    A(){
        cout<<endl;
        cout<<"";
    }
    virtual ~A(){
        cout<<"~A"<<endl;
    }
    virtual void kind(){
        cout<<"Type-A"<<endl;
    }
};
class B:public A{
    public:
    B(){
        cout<<"";
    }
    virtual ~B(){
        cout<<"~B ";
    }
    void kind(){
        cout<<"Type-B"<<endl;
    }
};
class C:public A{
    public:
    C(){
        cout<<"";
    }
    virtual ~C(){
        cout<<"~C ";
    }
    void kind(){
        cout<<"Type-C"<<endl;
    }
};
class D:public A{
    public:
    D(){
        cout<<"";
    }
    virtual ~D(){
        cout<<"~D ";
    }
    void kind(){
        cout<<"Type-D"<<endl;
    }
};
int main(){
    int n=10;
    vector<A*> vec;
    A* pa;
    for(int i=0;i<n;i++){
        int type=rand()%4;
        switch(type){
            case 0:
                pa=new A();
                break;
            case 1:
                pa=new B();
                break;
            case 2:
                pa=new C();
                break;
            case 3:
                pa=new D();
                break;
        }
        vec.push_back(pa);
    }
    vector<A*>::iterator ite;
    cout<<endl;
    for(ite=vec.begin();ite!=vec.end();++ite)
        (*ite)->kind();
    for(ite=vec.begin();ite!=vec.end();++ite)
        delete (*ite);

    return 0;
}

输出如下:

C++中泛型编程与面向对象编程

参考:http://blog.csdn.net/wuliaoshengji/article/details/449870

原文链接: https://www.cnblogs.com/xkfz007/archive/2012/07/16/2594174.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    C++中泛型编程与面向对象编程

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/55406

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 上午6:32
下一篇 2023年2月9日 上午6:32

相关推荐