我正在使用复数来学习设计模式。我目前正在使用一个抽象类:
namespace abstract{
class complex{
public:
virtual ~complex() = 0;
virtual double re() const = 0;
// some other virtual function
};
};
namespace cartesian{
class complex : public abstract::complex{
public:
complex(){}
~complex(){}
double re() const override{return re_;};
//... other functions
private:
double re_;
double im_;
// other
};
};
namespace polar{
class complex{
/// polar complex numbers....
};
};
我希望能够写在主要:
cartesian::complex c(1,2);
polar::complex p(3,PI);
exponential::complex q = exp(c) + p;
print(q)
问题是我必须为每个类写很多赋值操作符,并带有forward声明。那么有没有办法让复杂类的所有表示都是相同类型的,只是有不同的构造函数呢?比如pimpl,每个实现都有不同的指针,或者我不知道模板。
1条答案
按热度按时间2skhul331#
此 任务 没有 通用 的 设计 模式 。
多态 性 对 我 来说 不 是 一 种 设计 模式 , 它 是 C + + 语言 不可 分割 的 一 部分 。
当然 , 很 明显 C + + 中 已经 有 了 所有 的 东西 。 所以 , 你 已经 知道
std::complex
了 。 我 不 确定 你 是否 知道 std::literals::complex_literals 。 有 了 它 , 你 可以 写 一些 直观 的 东西 , 比如 :中 的 每 一 个
示例 摘自 CPP 参考 文件
您 可以 选择 复数 的 一 种 表示 形式 , 然后 将 所有 其他 形式 转换 为 它 。 这样 , 您 就 可以 使用 一 种 数据 类型 执行 所有 操作 。
你 唯一 需要 集成 的 就是 更多 的 构造 函数 和 赋值 运算 符 , 但 最 好 使用 复杂 文字 。
所以 , 我 的 建议 是 。 不要 使用 多态 。 对于 这个 任务 来说 , 它 太 复杂 , 太 慢 。
请 考虑 一下 。
出于 教学 的 目的 , 你 当然 可以 实现 你 的 解决 方案 。 为此 , 使用 自 定义 的 文字 或 解析 器 ...