Chinaunix首页 | 论坛 | 博客
  • 博客访问: 196776
  • 博文数量: 71
  • 博客积分: 3135
  • 博客等级: 中校
  • 技术积分: 740
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-23 13:29
文章分类

全部博文(71)

文章存档

2012年(3)

2011年(1)

2010年(7)

2009年(3)

2008年(15)

2007年(24)

2006年(18)

我的朋友

分类: C/C++

2008-01-26 15:48:42

C++里的抽象接口类。对纯虚函数的一些理解与运用。
以前在写java程序时曾经看到张孝祥讲解的java里的interface接口类的运用,现在把它用C++的纯虚函数来实现。纯虚函数无非就是提供一个接口给大家用(如果还有其他功用请告知笔者,一起学习)。
场景:
    主板生产厂商提供了PCI插槽,据我们目前所知的PCI插槽里可以插如声卡,显卡,电视卡,等等。为什么同样的接口可以按照不同的方式工作呢?你肯定没有认真想过这个问题,因为声卡显卡厂商遵从了主板厂商的PCI接口规范。我们用C++语言来表现这里边的关系。从而窥探纯虚函数的用法。

1.主板厂商提供一个PCI插槽的接口规范

class PCI
{
public:
    virtual void StartPlay()=0;//由各厂商去实现
    virtual void StopPlay()=0;
//由各厂商去实现
};

2.声卡厂商遵从PCI接口规范(继承PCI)

class SoundMax : public PCI
{
    virtual void StartPlay()
    {
        cout << "This is start SoundMax" << endl;
    }
    virtual void StopPlay()
    {
        cout << "now close the SoundMax" << endl;
    }
};

3.显卡厂商遵从PCI接口规范(继承PCI)

class ATI : public PCI
{
    virtual void StartPlay()
    {
        cout << "This is ati work" << endl;
    }
    virtual void StopPlay()
    {
        cout << "now close ati work" << endl;
    }
};


4.主板厂商提供一个遵从PCI规范的进来的接口

class MainBoard
{
public:
    MainBoard()
    {    
    }
    ~MainBoard()
    {
    }
    void add(PCI *pci)
    {
        pci->StartPlay();
        pci->StopPlay();
    }
};

5.组装工人来了

#include

using namespace std;

int main()
{
    MainBoard *mb = new MainBoard();  //拿一块主板
    ATI *ati = new ATI();             //拿一块显卡
    SoundMax *sm = new SoundMax();    //拿一块声卡
    mb->add(ati);   //把显卡加到主板上,工作了
    mb->add(sm);    //把声卡加到主板上,工作了
    getchar();
}

阅读(889) | 评论(0) | 转发(0) |
0

上一篇:法克

下一篇:在arm板子上搭建ftpserver

给主人留下些什么吧!~~