c++ - 派生类的继承方法不起作用

标签 c++ class inheritance methods

基类:

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/

相关文章:

c++ - 继承构造函数不允许类似数组的初始化

java - addActionListener 和 "this"

c++ - 调用接收派生类列表的方法不会在 C++ 中编译

c++ - 无法在 z/OS 1.12 C++ 编译器错误中加载 CCNEP?

c++ - 在两个独立的 opengl 窗口中渲染一个独特的视频流

c++ - 为什么我的 RSS 随着堆栈分配的内存而增长

c# - 覆盖接口(interface)的返回类型

c++ - 从参数列表生成 C++ 函数

c++ - 这个单例对象创建代码有什么错误

java - 如何在java中深拷贝对象?