如何为不同的类重用相同的实现方法 我练习C++,我被困在下面的代码中,试图优化它们。我想知道我是否可以做些什么来优化他们方法的实现。因为除了常量之外,其他方法都是相同的。提前谢谢
多明尼奥斯如何为不同的类重用相同的实现方法 我练习C++,我被困在下面的代码中,试图优化它们。我想知道我是否可以做些什么来优化他们方法的实现。因为除了常量之外,其他方法都是相同的。提前谢谢,c++,class,optimization,reusability,C++,Class,Optimization,Reusability,多明尼奥斯 class HP { private: int valor; static const int LIMITE_INFERIOR = 0; static const int LIMITE_SUPERIOR = 1000; public: void setValor(int); int getValor() { return valor; } }; class MP { private: int valor; static const
class HP {
private:
int valor;
static const int LIMITE_INFERIOR = 0;
static const int LIMITE_SUPERIOR = 1000;
public:
void setValor(int);
int getValor() {
return valor;
}
};
class MP {
private:
int valor;
static const int LIMITE_INFERIOR = 0;
static const int LIMITE_SUPERIOR = 500;
public:
void setValor(int);
int getValor() {
return valor;
}
};
多明尼奥斯
void HP::setValor(int valor) {
if (valor < LIMITE_INFERIOR) this->valor = LIMITE_INFERIOR;
else if (valor > LIMITE_SUPERIOR) this->valor = LIMITE_SUPERIOR;
else this->valor = valor;
}
void MP::setValor(int valor) {
if (valor < LIMITE_INFERIOR) this->valor = LIMITE_INFERIOR;
else if (valor > LIMITE_SUPERIOR) this->valor = LIMITE_SUPERIOR;
else this->valor = valor;
}
void HP::setValor(int valor){
如果(valorvalor=LIMITE_-subsier;
否则如果(valor>LIMITE_SUPERIOR)此->valor=LIMITE_SUPERIOR;
否则这->勇气=勇气;
}
void MP::setValor(int valor){
如果(valorvalor=LIMITE_-subsier;
否则如果(valor>LIMITE_SUPERIOR)此->valor=LIMITE_SUPERIOR;
否则这->勇气=勇气;
}
正如您所看到的,这两个类的setValor是相同的。我尝试使用“模板”来实现层次结构,但由于常量的原因,这对我来说不起作用
this->valor = std::clamp(valor, LIMITE_INFERIOR, LIMITE_SUPERIOR);
模板
类度量{
私人:
英勇;
公众:
void setValor(intv){valor=std::clamp(v,lo,hi);}
int getValor(){return valor;}
};
结构HPTag;
使用HP=公制;
结构MPTag;
使用MP=公制;
哦,谢谢!您还知道我可以做些什么来避免两次编写setValor的实现吗?因为实现是一样的,除了常量?用一种可能的方法更新了答案。嘿,还有一个问题,为什么要使用上面的结构?标记?它们可能是必需的,也可能不是必需的,这取决于设计的其余部分。它们允许您创建两种不同类型的度量,即使它们恰好具有相同的边界。例如,您可以在它们上重载函数然后C
和C
是两种不同的类型-例如,您可以有两个重载函数void f(C)
和void f(C)
。即使C
在其定义中没有实际使用t
,这也是正确的;事实上,SomeType
和SomeOtherType
甚至不需要定义,只需声明它们就足够了。它们是声明为struct
还是class
没有任何区别。
template <typename Tag, int lo, int hi>
class Metric {
private:
int valor;
public:
void setValor(int v) { valor = std::clamp(v, lo, hi); }
int getValor() { return valor; }
};
struct HPTag;
using HP = Metric<HPTag, 0, 1000>;
struct MPTag;
using MP = Metric<MPTag, 0, 500>;