C/C++技巧 类静态函数实例封装
			 2023-06-06
			  29
			 0
			
			
			
				
			
			
		
			使用C++开发项目时,多态,继随给我们的项目开发提供了方便简洁。
但类的实例化入口没有一个比较好的解决方法,反正就是用到那里就实例化这个派生类,但由于继承虚函数,我们在使用这个类实例时经常调用的是它的虚函数。所以对于类的实例化有必要提供一个统一的管理接口。
如有基类A,我们提供一个静态成员函数Create,根据传入的参数,提供不同的派生类实例。
获取派生类指针后,只需要简单的判断,我们就可以调用其成员虚函数了。
这样在实际项目开发过程中,只需要加入基类的头文件就可以了。
对于头文件之间的相互引用问题,我们只需要将静态成员函数的实现放到不同的.cpp文件中即可。这样只在这个cpp文件只进行实例的创建管理。
#include "stdafx.h"
class A
{
public:
    static A*  Create(int type);
virtual    void print()
    {
        printf("A::printn");
    }
};
class B : public A
{
    virtual    void print() override
    {
        printf("B::printn");
    }
};
A* A::Create(int type)
{
    if (type == 1)
    {
        printf("A::Createn");
        return new B;
    }
    else
    {    
        printf("NO CREATEn");
        return NULL;
    }
}
int _tmain(int argc, _TCHAR* argv[])
{
    A* p = A::Create(1);
    if (p != NULL)
    {
        p->print();
        delete p;
    }
    return 0;
}
输出结果:
A::Create
B::print
使用扩展
当然了,不光可以通过传入参数进行实例不同的派生类,也可以根据编译的条件宏。
如跨平台宏实现不同同的类用于跨平台的兼容,编译时的debug或自定义宏用于调试的继随类等。
其实就是说只要你想实现某个类或者功能的二意或者多意性,都可以使用这个方法。
 C/C++技巧
			C/C++技巧
			




