我正在尝试使用C ++ java / C#类接口,创建只有纯虚方法的类,如下所示:(这只是一个例子)
class IMyInterface
{
public:
virtual int someFunc() = 0;
virtual ~IMyInterface() {}
};
在我实现一个在IMyInterface
数组中交换两个元素的方法时,一切都很好,因为在C ++中不允许实例化接口,因为编译器会抱怨temp
没有实现someFunc()
。
void Exchange(IMyInterface* array, int i, int j)
{
IMyInterface temp = array[i]; // not allowed
array[i] = array[j];
array[j] = temp;
}
所以我不得不改变接口类定义并摆脱纯虚函数并提供方法的“默认”实现,如下所示:
class IMyInterface
{
public:
virtual int someFunc()
{
return 0;
}
virtual ~IMyInterface() {}
};
问题是IMyInterface
不再是一个接口,它不会强制从它继承的任何类来实现someFunc()
。
无论如何?
答案 0 :(得分:2)
接口不是完全定义的对象,因此您无法创建它们的实例。它们具有未定义的大小和结构,因此它们显然无法在值上下文中创建或使用。但是,您可以创建指向接口的指针(Happy Guys?),因为指向对象的指针定义得非常好。示例代码可能变为:
void Exchange(IMyInterface** array, int i, int j)
{
IMyInterface* temp = array[i]; // allowed :)
array[i] = array[j];
array[j] = temp;
}
如果操作是应该通过值完成的,那么模板函数可能更合适。