我正在尝试使用接口(interface)
class IDemo
{
public:
virtual ~IDemo() {}
virtual uint32_t Some_Operation(uint32_t a, uint32_t b) = 0;
};
class Child_A : public IDemo
{
public:
virtual uint32_t Some_Operation(uint32_t a, uint32_t b);
};
class Child_B : public IDemo
{
public:
virtual uint32_t Some_Operation(uint32_t a, uint32_t b);
};
Child_A::Some_Operation 返回 a+b 的总和 Child_B::一些操作返回产品a*b
用法如下
bool Test_Inferface()
{
IDemo* pDemo = new Child_B();
uint32_t product = pDemo->Some_Operation(1, 2);
delete pDemo;
if (2 != product)
{
return false;
}
pDemo = new Child_A();
uint32_t sum = pDemo->Some_Operation(1,2);
delete pDemo;
if(3 != sum)
{
return false;
}
return true;
}
由于可能的内存泄漏,我试图避免新建/删除。 是否可以静态分配接口(interface)?
IDemo test = Child_A();
编译器不喜欢那样。
最佳答案
非常简单。多态性(接口(interface))与动态分配无关。如果你不想动态分配,那就不要。
您的示例很容易像这样工作:
bool Test_Inferface()
{
Child_B child_b;
uint32_t product = child_b.Some_Operation(1, 2);
if (2 != product)
{
return false;
}
Child_A chile_a;
uint32_t sum = child_a.Some_Operation(1,2);
if(3 != sum)
{
return false;
}
return true;
}
您可能需要一个实际使用接口(interface)的更好示例。
// here we have an interface reference parameter that doesn't care if what is
// passed to it is dynamically allocated or sitting on the stack.
uint32_t better_example(IDemo& demo)
{
return demo.Some_Operation(1, 2);
}
bool Test_Inferface()
{
Child_B child_b;
uint32_t product = better_example(child_b);
if (2 != product)
{
return false;
}
Child_A chile_a;
uint32_t sum = better_example(child_a);
if(3 != sum)
{
return false;
}
return true;
}
关于C++ 使用没有动态分配的接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51584809/