我只想在“数字”类中overload + and = operators
。
我想要两个孩子班 A.整数B.分数,实现"Number" class
。目前以下是我的代码的样子。但在这里我使用的是both Static and Run time polymorphism paradigm
。如何避免呢?
代码段:
数字等级:
template<class T>
class Number
{
virtual T& operator= (const T &) = 0;
virtual const T operator+ (const T &) = 0;
virtual void display(std::ostream &) = 0;
};
整数类:
// operator "=" overloading
Integer& Integer::operator=(const Integer &secondNumber)
{
intValue = secondNumber.intValue;
return *this;
}
// operator "+" overloading
const Integer Integer::operator+(const Integer &secondNumber)
{
Integer temp;
temp.intValue = this->intValue + secondNumber.intValue;
return temp;
}
另外,如果我从“Number”类中删除“template”,我就不能重载+运算符,因为它返回类实例,而且我们不能有一个抽象类的实例,它是“Number class”
另外,如果我不能删除虚拟关键字,因为我希望我的孩子实现“数字类”中的方法。
请指点我这里有没有办法在代码中没有这两种类型的范例,即静态和动态。
答案 0 :(得分:1)
你需要决定你更喜欢哪种方法,也许你也只想使用这种方法。但是我没有在代码中看到编译时多态性,只是创建了通用模板的多个实例。这两个实例没有任何共同点,除非它们也继承了一个公共接口。
关于决定使用哪种方法,而不是查看你想要从代码中获取的内容,我发现的是:你需要决定哪些功能你不需要,或者可能不想包含在你的设计。
这是一个非常有限的积分列表,根据您的具体情况可能有好有坏:
我可以假设您的Number
课程不需要混合类型数组(Number<int>
&amp; Number<float>
)。如果是这种情况,编译时解决方案可能是合适的。但是,如果您想要创建一个可以在任何形式的Number
上运行的函数,那么您必须从Number
中删除该模板或将该函数实现为模板(最终可能会使用代码每T
个重复一次。
U 根据更具体的需求更新您的问题,正确的方法或组合将更加明显。我也会更新这个答案。
我的大部分观点来自于使用嵌入式系统。需要考虑系统功能才能做出明确的决策。如果您可以掠夺资源而对用户体验影响不大,那么使代码变得非常抽象并且肉眼难以理解可能是不值得的。