派生类的继承方法不起作用
Derived class' inherited method not working
基类:
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类。派生类从它的基类继承方法getLength()
。然而,当我通过Line3D对象(派生类的对象)调用getLength()
时,返回值始终是0.000
。
I cout
some消息在getLength()
中,它表明程序确实调用了getLength()。然而,返回值总是0.000
。为什么会出错呢?
在我的代码中没有错误,但是派生类只是无法通过getLength()
获得任何值。当我用基类对象调用getLength()
时,它有值。
根据我的理解,getLength
方法总是返回基类成员length
的内容,setLength
不能在派生类中编写,因为它在基类中是私有的。将length
从派生类中移除并使length
在基类中成为protected
应该可以解决这个问题;然而,令我惊讶的是,问题中的代码在语法上是正确的。
在Line3D
中,对getLength()
的调用是对超类继承方法的调用,该方法反过来又使用其"本地"(对Line2D
) length
属性。对setLength()
的调用是对Line3D中覆盖的方法的调用,该方法反过来使用其"本地"(Line3D
)长度属性。所以当你调用getLength()
时,你会得到超类length
的值,它可能被初始化为0。一般来说,在子类中定义具有相同名称的属性是一个非常糟糕的设计。因此,删除您的Line3D::length
属性,只使用getLength()
和setLength()
方法。我可以建议您添加一个参数,如setLength(int v)
,并用一个具有适当值的新参数替换对setLength()
的调用(您可以使用一个私有的有用的distance()
方法来进行计算)
- 基本加密和解密方法不起作用 C++ 11.
- 结构/方法不起作用
- 将字符数组设置为彼此相等的方法不起作用
- ConvertToReferencePoint 方法不起作用,获取作业参数的 NULL (HyperV 2016)
- 为什么方法不起作用?
- C boost :: bimap insert()方法不起作用
- 为什么我的将向量保存到文件然后再次读出的方法不起作用?
- 为什么这种交换方法不起作用
- Qt. 方法显示文本() 如果我在 QStyledItemDelegate 中定义了 paint() 方法不起作用
- 非递归二进制树插入()方法不起作用
- C++中的Friend方法不起作用
- 为什么这种删除文件夹中文件的方法不起作用?
- 二叉树递归插入方法不起作用
- CGI POST方法不起作用
- 为什么我的 pow 方法不起作用?
- 类方法不起作用
- 使用ctypes从Python调用C++方法不起作用
- C++虚拟方法不起作用
- 为什么用double&&初始化对象方法不起作用?
- 使用虚拟重写基类方法不起作用