C/C++技巧 类静态函数实例封装
2023-06-06
21
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或自定义宏用于调试的继随类等。
其实就是说只要你想实现某个类或者功能的二意或者多意性,都可以使用这个方法。