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 就可以调用所有派生类的虚函数。
*对于具有复杂继承关系的大中型程序,多态可以增加其灵活性,让代码更具有表现力。
*纯虚函数是在基类中声明的虚函数,它在基类中没有定义,但要求任何派生类都要定义自己的实现方法。在基类中实现纯虚函数的方法是在函数原型后加“=0”
 virtual void funtion1()=0。
----------------
----------------
关于析构函数的知识:
*析构函数(destructor)是成员函数的一种,它的名字与类名相同,但前面要加~,没有参数和返回值。
*一个类有且仅有一个析构函数。如果定义类时没写析构函数,则编译器生成默认析构函数。如果定义了析构函数,则编译器不生成默认析构函数。
*析构函数在对象消亡时即自动被调用。可以定义析构函数在对象消亡前做善后工作。例如,对象如果在生存期间用 new 运算符动态分配了内存,则在各处写 delete 语句以确保程序的每条执行路径都能释放这片内存是比较麻烦的事情。有了析构函数,只要在析构函数中调用 delete 语句,就能确保对象运行中用 new 运算符分配的空间在对象消亡时被释放。

-----------------
回到IObject,第二个和第三个纯虚函数定义了基于管理生命周期的计数参考函数。最后一个纯虚函数用于询问组件的所有接口。也就是说通过QueryInterface()使得用户获得关于组件的接口。
每一个接口都有一个独特的ID,ID号在字面上看是一个字符串,有别于128个bit的UID(通用唯一识别码)。
Ptr作为智能指针,通过使用AddRef()和Release()来管理组件的生命周期,并且它还可以调用QuerInterface()来自动获得组件的接口。
 


参考文章:
http://c.biancheng.net/view/2294.html
https://github.com/Fuzzier/nsfx/blob/tutorials/tutorials.md
https://blog.csdn.net/huabiaochen/article/details/100576503
http://c.biancheng.net/view/152.html


你可能感兴趣的:(NSFX手册的学习(1))