问题描述
我正在为我的大学做练习,我必须使用Decorator设计模式创建一个Vector3D
类。
[编辑1:这里要注意的一件事,我的教授告诉我们,如果我理解正确,则将Decorator和ConcreteDecorator合并为一个类Vector3D
。
这就是我随附的。
class Vector3D : public IVector
{
std::shared_ptr<IVector> vector2D;
double z;
public:
Vector3D(IVector* vector2D,double z);
double abs() const override;
std::vector<double> getComponents() const override;
std::vector<double> getAngles() const override;
double cdot(const IVector& vector) const override;
};
然后,我必须实现一个函数,该函数返回两个向量的叉积。我知道如何计算坐标,但是我不知道如何构造对象,因为我的构造函数接受实现IVector
的类的任何对象,而IVector
本身没有构造函数。
Vector3D Vector3D::crossproduct(const IVector &vector) const
{
const auto v = vector2D->getComponents();
const auto coords = vector.getComponents();
if(coords.size() != 3)
throw std::runtime_error("Given vector has wrong number of components");
return ???
}
我应该只使用Vector2D
的构造函数创建该对象,还是有点破坏设计模式?我有什么混淆的地方吗?
[edit 2:我想知道是否有可能获得std::shared_ptr<IVector> vector2D
字段所指向的对象的类型并以某种方式使用其构造函数?]
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)