用C ++覆盖方法

时间:2015-12-18 15:23:29

标签: c++ class methods override

我应该创建一个表示二维点的基类(P2D)和一个表示三维点的派生类(P3D)。在第一节课中,我用这种方式创建了一个方法:

virtual istream& set(istream&); //sets the values

istream& P2D::set(istream& in){
    in >> x >> y;
    return in;
}

在第二节课中,改为:

istream& set(istream&); //sets the values

istream& P3D::set(istream& in){
    P2D::set(in); 
    in >> z;
    return in; 
}

在主要功能中,我考虑在矢量中放置所有点(无论它们是二维还是三维),然后使用{{1}以某种方式设置while周期中的所有点上面的方法。 以下是有问题的代码:

set

我知道这是错的,我知道为什么,但有没有机会克服不使用dinamic记忆?如果他想插入两维或三维点,我是否被迫让用户选择?

1 个答案:

答案 0 :(得分:2)

这似乎对我不利,因为继承意味着'是'关系',3D点绝对不是2D点。

这反映了您的问题,因为没有像您建议的那样优雅的方式。 IMO,用户必须决定是否输入2D或3D点,但是将它保持为2D点的集合仍然没有意义。

这一切都取决于你以后要用集合中的积分做什么。也许你应该有一个Point类型作为2D和3D点的父类,但是没有更大的背景就很难分辨。