基类:
class Line2D
{
friend ostream& operator<< (ostream&, const Line2D&);
private:
Point2D pt1;
Point2D pt2;
double length;
public:
Line2D () {pt1 = Point2D(); pt2 = Point2D(); length = 0.0;}
Line2D (Point2D ptA, Point2D ptB) {pt1=ptA; pt2=ptB; setLength();}
void setLength();
void setPt1 (Point2D);
void setPt2 (Point2D);
Point2D getPt1 () const;
Point2D getPt2 () const;
double getLength() const; //Inherited to sub-class, but not working in sub-class
};
double Line2D::getLength () const
{
return length;
}
void Line2D::setLength()
{
length = sqrt((pt1.getX() - pt2.getX())*(pt1.getX() - pt2.getX()) + (pt1.getY() - pt2.getY())*(pt1.getY() - pt2.getY()));
}
派生类:
class Line3D : public Line2D
{
friend ostream& operator<< (ostream&, const Line3D&);
private:
Point3D pt1;
Point3D pt2;
double length;
public:
Line3D (Point3D ptA, Point3D ptB) {pt1=ptA; pt2=ptB; setLength();}
void setLength();
void setPt1 (Point3D);
void setPt2 (Point3D);
Point3D getPt1 () const;
Point3D getPt2 () const;
};
void Line3D::setLength()
{
length = sqrt((pt1.getX() - pt2.getX())*(pt1.getX() - pt2.getX()) + (pt1.getY() - pt2.getY())*(pt1.getY() - pt2.getY()) + (pt1.getZ() - pt2.getZ())*(pt1.getZ() - pt2.getZ()));
}
我有 2 个类(class)。派生类从其基类继承方法 getLength()
。但是,当我通过 Line3D 对象(派生类的对象)调用 getLength()
时,返回值始终是 0.000
。
我在 getLength()
中cout
了一些消息,它表明程序确实调用了 getLength()。但是,返回值始终是 0.000
。为什么可能出错了?
我的代码没有错误,但是派生类无法通过getLength()
获取任何值。当我用基类对象调用 getLength()
时,它有值。
这太奇怪了...
最佳答案
据我理解,getLength
方法总是返回基类成员length
的内容,不能用setLength
来写在派生类中,因为它在基类中是私有(private)的。从派生类中删除 length
并在基类中设置 length
protected
应该可以解决问题;但是令我惊讶的是问题中的代码在语法上是正确的。
关于c++ - 派生类的继承方法不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23767234/