所谓的“平台”

来源:互联网 发布:主机域名的正确写法 编辑:程序博客网 时间:2024/05/17 01:39
2006-06-20 21:46
近来在工作中常听到一“平台”,后来一打听才明白,原来所谓的“平台”是一个封装好了的基类库。在实现一些新的功能时,你不要去改动原来的代码,只要把自已写好的与那个带有main的文件一同编译就可以了,其实其并没有什么高深的技术,只是这种方案是一种不错的解决方案,所以我把这个“平台”模拟了一下,我这个“平台”是由一个基类构成的,在这个类的定义文件中,含有一个主函数main,我在这里实现了两个功能,分别是A,B,它们主要是打印出各自的信息。
//// A.h
#ifndef A_H
#define A_H

#include "base.h"
class A :public base
{
 public:
  A(){}
  virtual ~A(){ cout<<"A destructor"<<endl; }
 public:
  virtual void print(int i);
};
#endif

//// A.cpp
#include "A.h"
A a;
void A::print(int i)
{
    cout<<"A::print("<<i<<")"<<endl;
}

//// B.h
#ifndef B_H
#define B_H
#include "base.h"
class B :public base
{
 public:
  B(){}
  virtual ~B(){}
 public:
  virtual void print(int i);
};
#endif

//// B.cpp
#include "B.h"
B a;
void B::print(int i)
{
    cout<<"B::print("<<i<<")"<<endl;
}

//// base.h
#ifndef BASE_H
#define BASE_H
#include <iostream>
using namespace std;

class base
{
    public:
        base();
        virtual ~base();
    public:
        virtual void print(int i);
};
#endif

//// base.cpp
#include "base.h"
base* g_base;
 
int main(void)
{
    g_base->print(100);
    return 0;
}

base::base()
{
    g_base=this;
}

base::~base()
{
    cout<<"base destructor"<<endl;
}

void base::print(int i)
{
    cout<<"base::print("<<i<<")"<<endl;
}

//// makefile
CC=g++
all:A B clean
B:base.cpp base.h B.o
    ${CC} -o B base.cpp B.o
A:base.cpp base.h A.o
    ${CC} -o A base.cpp A.o
B.o:B.h B.cpp
    ${CC} -c B.cpp
A.o:A.h A.cpp
    ${CC} -c A.cpp
clean:
    rm *.o

这里我们就在这个“平台”上建立了两个EXE文件,同样我们可以在不改去base的前提下,增加一个新的派生类,编译时也不需要去改动它。例如,我们要增加一个C的功能。我们写好类后,只要在makefile文件中新增一行
C:base.cpp base.h C.o
    ${CC} -o C base.cpp C.o
C.o:C.h C.cpp
    ${CC} -c C.cpp
就可以了,