C++ C++;整数、二进制和十进制类
在大学里,我的任务是用c++设计和实现三个类:Integer(作为抽象)、Binary和Decimal,用数组作为数字存储,Integer应该包含虚拟的算术运算方法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
因此,我对最后一点有一些误解……方法应该具有什么特征码,以及如何在子类中定义它们?这不是一项容易的任务,作为算术操作二进制操作和虚拟方法,是一种单一的调度机制
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
中实现,因为它将使用virtualGetDigit()
和GetRadix()
的子实现。所以我猜这样的措辞中的任务相当不正确……对吗?@crew4ok:不一定。我讲的习惯用法是使用虚拟方法。。。但是解决方案不仅仅是一个虚拟整数操作符+(const Integer&)const
,因为将Dec添加到Dec是不同的,那么将Bool添加到Bool,而不是将Dec添加到Bool,而不是Bool添加到Dec…所以这是我的问题=)。如何实现操作,即能够区分哪些整数引用引用?我有一个关于用dynamic_cast向下投射的想法,但我不确定它是否正确correct@crew4ok:是的,那是另一种方式。它本质上是等价的:每个类都必须知道所有其他类。