【发布时间】:2016-02-29 23:54:03
【问题描述】:
编辑
主要想法是制作一个允许添加新类型元素的界面。例如添加字符串,使用“X”算法计算其距离。这就是为什么我认为模板不可能是正确的答案。
我在 Element 类中更改了函数对距离的定义,现在它有了一个实现。
class Element : public Object
{
...
virtual float distance(Element *other){return INFINITE;};
...
}
对于 Vector 类,其变化相同:
class Vector : public Element
{
...
virtual float distance(Element *other);
...
}
它的实现是:
float Vector::distance(Element *other)
{
if(other->getClass() != this->getClass()) return INFINITE;//this came from Object class
Vector *n_other = dynamic_cast<Vector*>(other);
float result = this->L2D(*this,*n_other);
return result;
}
旧
我正在尝试用 C++ 做一个接口,以便子类可以编写这些方法。
在这种情况下,距离表示一个值,该值表示两个元素有多近(相似)。
例如,我现在正在尝试使用向量,但将来我会使用字符串或其他东西,如文档、面孔等……它可以像元素一样使用。
//Element.h
class Element
{
virtual float distance(Element const&, Element const&)=0;
};`
然后我有类向量
//Vector.h
#include "Element.h"
class Vector: public Element
{
float distance(Vector const&, Vector const&);//(?)
};
以及实现
#include "Vector.h"
float Vector::distance(Element const &a, Element const &b)
{
return Vector::L2D(a,b);//Euclidean distance
}
我的问题是我该怎么做,因为我找不到这个问题的例子。 我不太确定你是否能理解我想要做的事情......我希望如此。 谢谢大家。
【问题讨论】:
-
子类不编写方法,他们实现它们。为什么距离方法需要两个对象?我希望它要么是一个要么是静态的。
-
顺便说一句,这个问题根本不清楚(至少对我来说)。你怎么能做什么?你找不到什么问题的例子?我没有发现任何问题。
-
我想我现在慢慢开始明白关于...的问题是什么
-
我不确定我是否理解。如果派生类函数没有不同的代码,则最好不要覆盖基类函数。如果确实如此,那么您就不想这样称呼基础。
-
Vector 没有实现虚方法距离。他们需要有相同的签名
标签: c++ inheritance interface abstract-class