NSFX手册的学习(1)

       (边学手册边学C++)

         组件的行为由组件所提供和使用的接口决定。组件通过一系列的接口来实现其函数功能的。目标模型的根接口是IObject。每一个接口一定直接或间接地从IObject衍生出来。每一个组件都一定会应用到IObject。

         我们来看下面这个例子:class IObject

{
public:
    virtual ~IObject(void) BOOST_NOEXCEPT {}

    virtual refcount_t AddRef(void) = 0;
    virtual refcount_t Release(void) = 0;
    virtual void*      QueryInterface(const Uid& iid) = 0;
};
IObject这个类定义了四个虚函数。
---------------
我们来看一下关于虚函数的知识:
*虚函数是为了实现多态性的。
*基类指针只能访问派生类的成员变量,但是不能访问派生类的成员函数。为了让基类指针能够访问派生类的成员函数,c++增加了虚函数。使用虚函数非常简单,只需要在函数声明前面增加virtual关键字。
*有了虚函数,基类指针指向基类对象时就使用基类的成员(包括成员函数和成员变量),指向派生类对象时就使用派生类的成员。
*换句话说,基类指针可以按照基类的方式来做事,也可以按照派生类的方式来做事,它有多种形态,或者说有多种表现方式,我们将这种现象称为多态(Polymorphism)。同一条语句可以执行不同的操作,看起来有不同表现方式,这就是多态。
*C++中虚函数的唯一用处就是构成多态。虚函数是根据指针的指向来调用的,指针指向哪个类的对象就调用哪个类的虚函数。
*只需要一个指针变量 p 就可以调用所有派生类的虚函数。
*对于具有复杂继承关系的大中型程序,多态可以增加其灵活性,让代码更具有表现力。
----------------
回到IObject,前两个虚函数定义了基于管理生命周期的计数参考函数。最后一个函数用于询问组件的所有接口。也就是说通过QueryInterface()使得用户获得关于组件的接口。
每一个接口都有一个独特的ID,ID号在字面上看是一个字符串,有别于128个bit的UID(通用唯一识别码)。
Ptr作为智能指针,通过使用AddRef()和Release()来管理组件的生命周期,并且它还可以调用
QueryInterface()来自动获得组件的接口。



参考文章:
http://c.biancheng.net/view/2294.html
https://github.com/Fuzzier/nsfx/blob/tutorials/tutorials.md



猜你喜欢

转载自www.cnblogs.com/lx61/p/12173722.html
今日推荐