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
就可以了,
近来在工作中常听到一“平台”,后来一打听才明白,原来所谓的“平台”是一个封装好了的基类库。在实现一些新的功能时,你不要去改动原来的代码,只要把自已写好的与那个带有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
就可以了,