我的代码输出奇怪的数字。在“返回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");
}
答案 0 :(得分:3)
在x1
中,您仅设置Z值。 X和Y处于未初始化状态。因此,添加它们时您不知道它们的值。
否则,您可能对该程序感兴趣:
#include <iostream>
class Point2D {
protected:
double x, y;
public:
Point2D(double x, double y) : x(x), y(y) {
std::cout << "Objekts izveidots bez parametriem.\n";
}
double getsumma() const {
return x + y;
}
virtual void printInfo() const {
std::cout << "Divu malu summa ir: " << getsumma() << '\n';
}
virtual ~Point2D() {
std::cout << "Izdzests\n";
}
};
class Point3D : public Point2D {
protected:
double z;
public:
Point3D(double x, double y, double z) : Point2D(x, y), z(z) {
std::cout << "Objekts izveidots bez parametriem.\n";
}
double getperimetrs() const {
return getsumma() + z;
}
void printInfo() const override {
std::cout << "Trijstura perimentrs ir: " << getperimetrs() << '\n';
}
~Point3D() override {
std::cout << "Izdzests\n";
}
};
int main() {
Point2D z1(5, 3);
Point3D x1(5, 3, 5);
z1.printInfo();
x1.printInfo();
}
答案 1 :(得分:3)
继承不是这样的。
您有两个不同的,不相关的,不相关的独立对象:
Point2D
的{{1}},其成员z1
和x
由您设置。y
的{{1}},您为其设置的成员Point3D
。仅仅因为类型x1
继承自z
并不意味着这两个特定实例之间没有任何关系。
Point3D
的{{1}}未设置,并且Point2D
的{{1}}和z1
未设置。这些成员未初始化,没有指定值,因此输出不可靠。
我认为您可能只是想制作一个 对象,如下所示:
z
The output is 13(5 + 3 + 5不是11)。
继承是在x1
上进行x
和y
的方式,因为这些功能是从其Point3D obj;
obj.setx(5);
obj.sety(3);
obj.setz(5);
obj.printInfo();
继承而来的。 / p>
另一种查看方式是,每个setx
内都自动(通过继承)有一个“隐藏的” sety
。您不需要自己做。