C++ C++;整数、二进制和十进制类

C++ C++;整数、二进制和十进制类,c++,oop,inheritance,C++,Oop,Inheritance,在大学里,我的任务是用c++设计和实现三个类:Integer(作为抽象)、Binary和Decimal,用数组作为数字存储,Integer应该包含虚拟的算术运算方法 因此,我对最后一点有一些误解……方法应该具有什么特征码,以及如何在子类中定义它们?这不是一项容易的任务,作为算术操作二进制操作和虚拟方法,是一种单一的调度机制 class Integer { public: virtual void Add(Integer &B) { } = 0; // Adds B to th

在大学里,我的任务是用c++设计和实现三个类:Integer(作为抽象)、Binary和Decimal,用数组作为数字存储,Integer应该包含虚拟的算术运算方法


因此,我对最后一点有一些误解……方法应该具有什么特征码,以及如何在子类中定义它们?

这不是一项容易的任务,作为算术操作二进制操作和虚拟方法,是一种单一的调度机制

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);
}
事实上,这个问题的优雅解决方案应该是必需的,而不是C++中的原生。 作为一个提示,让我给你一个关于加法的想法:
看看C++和.</P>应该支持哪些算术运算?我们可以用std::vector代替原始数组吗?对于我来说,理解加法就足够了:)我们可以。但问题是关于算术运算:)好的,最大位数是多少?:)它对std::vector重要吗?:)不管怎么说,问题是关于算术运算的。顺便说一句,如果你认为用这样的话来说这个任务很愚蠢,你可以提供更合理的答案我假设void Integer::Add(Integer&B)和void Decimal::Add(Decimal&B)有不同的签名,所以方法完全不同,应该返回结果引用的操作符是什么?家庭作业是关于实现的,问题是赋值的“函数签名”是什么意思在这种特殊情况下,您可以在派生类中返回对派生类的引用,并让编译器将其转换为基类。我的意思是,如果您使用void Add(Integer&B)签名声明虚方法,你应该用同样的方法重新实现它。什么方法
GetDigit()
GetRadix()
-是,它们必须在
Integer
中声明为纯虚拟
Add
可以在
Integer
中实现,因为它将使用virtual
GetDigit()
GetRadix()
的子实现。所以我猜这样的措辞中的任务相当不正确……对吗?@crew4ok:不一定。我讲的习惯用法是使用虚拟方法。。。但是解决方案不仅仅是一个
虚拟整数操作符+(const Integer&)const
,因为将Dec添加到Dec是不同的,那么将Bool添加到Bool,而不是将Dec添加到Bool,而不是Bool添加到Dec…所以这是我的问题=)。如何实现操作,即能够区分哪些整数引用引用?我有一个关于用dynamic_cast向下投射的想法,但我不确定它是否正确correct@crew4ok:是的,那是另一种方式。它本质上是等价的:每个类都必须知道所有其他类。