//设计一个数字抽象类,可以显示3中数字类型(整数,实数,复数)
//RealNumber,完成实数运算和现实。
//IntegerNumber,完成实数运算和现实。
//ComplexNumber,完成复数运算和现实。
//在主函数测试中使用多态方式显示不同数字对象。
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
using namespace std;
//创建一个数字基类
class Number
{
public:
Number(){}
~Number(){}
virtual void print(){}
};
// 实数类型
class RealNumber :public Number
{
private:
double value; // 小数值
public:
RealNumber(double a = 0) :value(a){}
~RealNumber(){}
virtual void print();
RealNumber add(const RealNumber& other);
RealNumber mul(const RealNumber& other);
};
// 整数类型
class IntegerNumber :public RealNumber
{
private:
int value; // 整数值
public:
IntegerNumber(int a = 0) :value(a){}
~IntegerNumber(){}
virtual void print();
IntegerNumber add(const IntegerNumber& other);
IntegerNumber mul(const IntegerNumber& other);
};
// 复数类型
class ComplexNumber :public Number
{
private:
double a;// 实部
double b;// 虚部
public:
ComplexNumber(double aa = 0, double bb = 0) :a(aa), b(bb){}
~ComplexNumber(){}
virtual void print();
ComplexNumber add(const ComplexNumber& other);
ComplexNumber mul(const ComplexNumber& other);
};
// -----------RealNumber函数实现-------------
void RealNumber::print()
{
cout << value << endl;
}
RealNumber RealNumber::add(const RealNumber& other)
{
return (value + other.value);
}
RealNumber RealNumber::mul(const RealNumber& other)
{
return RealNumber(value*other.value);
}
// -----------IntegerNumber函数实现-------------
void IntegerNumber::print()
{
cout << value << endl;
}
IntegerNumber IntegerNumber::add(const IntegerNumber& other)
{
return IntegerNumber(value + other.value);
}
IntegerNumber IntegerNumber::mul(const IntegerNumber& other)
{
return IntegerNumber(value*other.value);
}
// -----------ComplexNumber函数实现-------------
void ComplexNumber::print()
{
cout << a << "+" << b << "i" << endl;
}
ComplexNumber ComplexNumber::add(const ComplexNumber& other)
{
return ComplexNumber(a + other.a, b + other.b);
}
ComplexNumber ComplexNumber::mul(const ComplexNumber& other)
{
return ComplexNumber(a*other.a - b*other.b, a*other.b + b*other.a);
}
//打印输出
int main(void)
{
// 构造数字
RealNumber theone(9.99999);
RealNumber thenext(8.88888);
ComplexNumber one(5, 6);
ComplexNumber two(3, 4);
//打印输出
Number* result = new RealNumber(theone.add(thenext));
result->print();
Number* product = new ComplexNumber(one.mul(two));
product->print();
delete result, product;
// 暂停
system("pause");
return EXIT_SUCCESS;
}