c++ - 如何在 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");
}
解决方案
这不是继承的工作方式。
你有两个不同的、不同的、不相关的、独立的对象:
- 一个是被
Point2D
调用z1
的,它的成员x
和y
你设置。 - 另一个是被
Point3D
调用的,你设置了x1
它的成员。z
仅仅因为类型Point3D
继承自Point2D
并不意味着这两个特定实例之间存在任何关系。
z1
'sz
未设置,x1
'sx
和y
未设置。这些成员未初始化,具有未指定的值,因此您的输出不可靠。
我认为您可能只是想制作一个对象,如下所示:
Point3D obj;
obj.setx(5);
obj.sety(3);
obj.setz(5);
obj.printInfo();
输出为 13(5+3+5 不是 11)。
继承是您可以在 a 上执行setx
的操作,因为这些函数是从其基础继承的。sety
Point3D
Point2D
另一种看待它的方式是,每个人都自动(通过继承)在其中Point3D
“隐藏” 。Point2D
你不需要自己做一个。
推荐阅读
- python - 在 python 中编写 for 循环或迭代以在 URL 列表上执行相同的命令?
- php - 从字典中访问值的正确语法
- qt - QML GridView 列闪烁问题
- css - 引导卡 - 更改宽度
- python - 使用命令行实用程序的 python 子进程启动 Docker
- c - C、如何从队列中删除元素?
- python - 用于从网站下载文件的python脚本
- recursion - 为什么我们不能用 Opal 中使用 <~> 的代码替换 "many" 的 def?
- python - Mac:libGL.so.1:无法打开共享对象文件:没有这样的文件或目录
- javascript - 无法读取未定义的属性“toString” - Javascript