2012-02-03 32 views
0

在大学里,我有设计和实现C++中三个类的任务:Integer(作为抽象),Binary和Decimal,数组作为数字存储AND Integer应该包含虚拟算术运算方法。C++整数,二进制和十进制类

所以我对最后一点有一些误解......这些方法有什么特征以及如何在子类中定义它们?

+0

应该支持哪些算术运算?我们可以使用std :: vector而不是原始数组吗? – 2012-02-03 19:07:55

+0

对于我来说理解添加就够了:) 我们可以。但问题是关于算术运算:) – crew4ok 2012-02-03 19:10:37

+0

好吧,最大位数是多少? :) – 2012-02-03 19:12:02

回答

-1
class Integer { 
    public: 
    virtual void Add(Integer &B) { } = 0; // Adds B to the current value, etc.. 

} 
class Decimal : public Integer { 
    public: 
    void Add(Decimal &B) { /* do sth */ } 
} 

int main(void) { 
    Integer *a = new Decimal(); 
    Integer *b = new Decimal(); 
    a->Add(b); 
} 
+1

-1这是一个家庭作业问题 – wilhelmtell 2012-02-03 19:18:13

+0

没有帮助我想这 无效整数::加入(整数&B) 和 无效十进制::加入(十进制&B) 有不同的签名,所以它在所有 不同的方法和关于应该返回引用结果的运算符是什么? – crew4ok 2012-02-03 19:19:05

+0

作业是关于实现的,问题是在这个特殊情况下,函数签名的意思是什么 – qdot 2012-02-03 19:20:04

0

这不是一件容易的事情,算术运算是二元运算,是虚拟方法的单一调度机制。

其实优雅解决方案的问题应该要求Multimethods,而不是在C++原生。

就像一个提示,让我给你一个关于加法的想法: 看看C++ dual dispatchvisitor pattern

+0

所以我猜这样的措辞任务是相当不正确的......对吗? – crew4ok 2012-02-03 20:51:01

+0

@ crew4ok:不一定。我告诉使用虚拟方法的成语......但解决方案不仅仅是一个'虚拟整数运算符+(const Integer&)const',因为将Dec加入Dec是不同的,那么将Bool添加到Bool,比Dec要Bool而不是Bool来Dec。 – 2012-02-03 20:58:01

+0

那么这是我的问题=)。如何实现操作,这将能够区分什么整数引用引用?我有一个关于dynamic_cast downcast的想法 但我不确定它是否正确 – crew4ok 2012-02-03 21:08:30

相关问题