我在我的一个继承层次结构中遇到了重复代码的一些困难。我怎样才能避免在函数 Smile() 中重复代码?
鉴于该变量_a
在基类中不存在,我无法将函数移到那里。同样创建这样的模板函数template<typename T> void smile(T& a) { a++; }
对我来说并不是真正的解决方案。我的实际代码有点复杂,如果不是不可能应用于我当前的设计,这样的解决方案将非常混乱。
class com
{
public:
com(int x, float y) : _x(2), _y(1.15f)
{ }
protected:
// Common functions go here .We need this base class.
protected:
int _x;
float _y;
};
class com_int : public com
{
public:
void fill()
{ _a = std::max(_x, (int)_y); }
protected:
int _a;
};
class com_real : public com
{
public:
void fill()
{ _a = std::min((float)_x, _y); }
protected:
float _a;
};
class happy_int : public com_int
{
public:
void smile() { _a ++; } // BAD: Will be duplicated
};
class happy_float : public com_real
{
public:
void smile() { _a ++; } // BAD: Duplicated code
}
class sad_int : public com_int
{
public:
frown() { _a --; }
}
另外,有没有人知道一本教如何使用 OOP 和模板原则在 C++ 中实际设计代码的好书?