注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

还东国的博客

行之苟有恒,久久自芬芳

 
 
 

日志

 
 

面向接口编程  

2013-11-14 23:24:56|  分类: UML+设计模式 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

面向接口编程

原来在C#里经常使用interface做接口来处理多个类之间的交互问题。在C++中,也可以使用抽象类利用多态来实现这个问题。先看一个简单的例子。

//ia.h

class IA

{

public:

         IA(void);

         virtual ~IA(void);

         virtual void getdata()=0;

          static  IA *create();

};

//IA*create();//也可也利用全局函数来实现

//ia.cpp

#include "IA.h"

#include "A.h"

 

IA::IA(void)

{

}

 

 

IA::~IA(void)

{

}

IA *IA::create()

{

         return new A();

}

//a.h

#include "ia.h"

class A : public IA

{

public:

         A(void);

         virtual ~A(void);

         IA *create();

         void getdata();

};

//a.cpp

#include "A.h"

 

A::A(void)

{

}

 

 

A::~A(void)

{

}

IA * A::create()

{

         return new A();

}

void A::getdata()

{printf("this is A display");}

 

//main.cpp

#include "IA.h"

 

int _tmain(int argc, _TCHAR* argv[])

{

         IA *p = IA::create();//这里也可以用ia.h中注释的全局函数实现,效果一样。

         p->getdata();

         getchar();

         return 0;

}

 

这里早晨有些犯晕,把一些关系没有想清楚。写了一个下面的东西,绕得有些麻烦,但是当时没有明白过来:

//baseinter.h

class BaseInter

{

public:

         BaseInter(void);

         virtual ~BaseInter(void);

        

         virtual void GetData();

         int GetInstace();

         int GetInsatceStatic();

private:

         BaseInter *p;

};

//baseinter.cpp

#include "BaseInter.h"

#include "stdio.h"

#include "stdlib.h"

#include "TestBase.h"

 

BaseInter::BaseInter(void)

{

}

BaseInter::~BaseInter(void)

{

}

int BaseInter::GetInstace()

{

         p = new TestBase();

         return 0;

}

void BaseInter::GetData()

         p->GetData();

         //printf("this is  base");

}

int BaseInter::GetInsatceStatic()

{

         return 0;

}

//testbase.h

#include "baseinter.h"

class TestBase :

         public BaseInter

{

public:

         TestBase(void);

         virtual ~TestBase(void);

         void GetData();

private:

        

};

 

//TestBase.cpp

#include "TestBase.h"

#include "stdio.h"

#include "stdlib.h"

 

TestBase::TestBase(void)

{

}

 

 

TestBase::~TestBase(void)

{

}

void TestBase::GetData()

{

         printf("this is TestBase");

}

 

//main.cpp

#include "BaseInter.h"

#include "IA.h"

//调用方式

int _tmain(int argc, _TCHAR* argv[])

{

         BaseInter t;

         //t.GetData();

         t.GetInstace();

         t.GetData();

 

         getchar();

         return 0;

}

这后来又想到一个问题,如果在父类中要不断的调用子类的保护成员函数,或者说在父类的一个函数中调用多个子类的成员变量(当然是重写的,多态),如下:

void BaseInter::GetData()

         p->GetData();   

p->GetData1();//假设这个也是个虚函数;或者下面这两个函数是protected的。

p->GetData2();//同上

         //printf("this is  base");

}

所以还得看情况来吧。技术问题越讨论越明白。是好事。

  评论这张
 
阅读(595)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017