首页 > 解决方案 > 如何在 C++ 中将一个类字符移动到另一个类

问题描述

我的代码输出奇怪的数字。在“return this->x + this->y + this->z;”行中,它应该输出所有这 3 个数字的总和,但它输出奇怪的数字。预期结果:11

任何人都可以帮助解决这个问题吗?

代码:

#include <iostream>
#include <string>


class Point2D {

protected:
    double x,y;

public:

    Point2D() {
        std::cout << "Objekts izveidots bez parametriem." << std::endl;
    }

    void setx(double x) {
        this->x = x;
    }

    void sety(double y) {
        this->y = y;
    }

    double getsumma() {
        return this->x + this->y;
    }

    void printInfo() {
        std::cout << "Divu malu summa ir:" << getsumma() << std::endl;
    }

    ~Point2D() {
        std::cout << "Izdzests" << std::endl;
    }
};

class Point3D : public Point2D {
protected:
    double z;

public:

    Point3D() {
        std::cout << "Objekts izveidots bez parametriem." << std::endl;
    }

    void setz(double z) {
        this->z = z;
    }


    double getperimetrs() {
        return this->x + this->y + this->z;
    }

    void printInfo() {
        std::cout << "Trijstura perimentrs ir: " << getperimetrs() << std::endl;
    }

    ~Point3D() {
        std::cout << "Izdzests" << std::endl;
    }
};

int main() {

    Point2D z1;
    Point3D x1;

    z1.setx(5);
    z1.sety(3);
    x1.setz(5);

    z1.printInfo();
    x1.printInfo();

    system("pause");

}

标签: c++

解决方案


这不是继承的工作方式。

你有两个不同的、不同的、不相关的、独立的对象:

  • 一个是被Point2D调用z1的,它的成员xy你设置。
  • 另一个是被Point3D调用的,你设置了x1它的成员。z

仅仅因为类型Point3D继承自Point2D并不意味着这两个特定实例之间存在任何关系。

z1'sz未设置,x1'sxy未设置。这些成员未初始化,具有未指定的值,因此您的输出不可靠。

我认为您可能只是想制作一个对象,如下所示:

Point3D obj;
obj.setx(5);
obj.sety(3);
obj.setz(5);
obj.printInfo();

输出为 13(5+3+5 不是 11)。

继承是您可以在 a 上执行setx的操作,因为这些函数是从其基础继承的。setyPoint3DPoint2D

另一种看待它的方式是,每个人都自动(通过继承)在其中Point3D“隐藏” 。Point2D你不需要自己做一个。


推荐阅读