为什么我的值没有由我的初始化(参数化)构造函数初始化?
Why aren't my values being initialized by my initialization (parameterized) constructors?
我有一个基类Point
,其中包含 3 个变量,我想派生为Body
属性。我想初始化一个点并使用它来初始化一个主体对象。这是我到目前为止所拥有的:
#include <iostream>
using namespace std;
class Point {
public:
double x, y, z;
// default constructor
Point(): x(0), y(0), z(0){
};
// intialization constructor
Point(double x, double y, double z){
x = x;
y = y;
z = z;
}
// copy constructor
Point(const Point &point){
x = point.x;
y = point.y;
z = point.z;
}
void print_point(){
cout << "x = "<< x << " y = " << y << " z = " << z << endl;
}
};
class Body: public Point{
public:
double mass;
// default constructor
Body(): Point(0, 0, 0), mass(0){
};
// intialization constructor
Body(const Point& point, double mass): Point(point.x, point.y, point.z){
mass = mass;
}
// copy constructor
Body(const Body &body): Point(body){
mass = body.mass;
}
void print_body(){
cout << "x = "<< x << " y = " << y << " z = " << z << " mass = " << mass << endl;
}
};
int main() {
Point p(1., 2., 3.);
p.print_point();
Body b(p, 65.);
b.print_body();
return 0;
}
当我编译并运行它时,我得到:
x = 0 y = 0 z = 6.95312e-310
x = 2.25081e-314 y = 0 z = 0 mass = 0
当我期望得到:
x = 1 y = 2 z = 3
x = 1 y = 2 z = 3 mass = 65
就像变量被默认构造函数重置一样,我不知道是什么原因造成的。
您应该将构造函数体内的赋值从
x = x;
y = y;
z = z;
自
this->x = x;
this->y = y;
this->z = z;
在构造函数的主体中,参数的名称隐藏了数据成员的名称。x = x;
只是将参数x
分配给自身,而不将数据成员分配给x
。类Body
具有相同的问题。
更好的方法是使用成员初始值设定项列表初始化数据成员(顺便说一句,它没有这样的名称隐藏问题)。
例如Point(double x, double y, double z) : x(x), y(y), z(z) {}
相关文章:
- 为什么我在初始化带大括号的结构时出错?
- 为什么当我在 CPP 的初始化中指定多维数组时,它必须有边界
- 为什么我的值没有由我的初始化(参数化)构造函数初始化?
- 我应该初始化抽象类的成员吗?
- 当读取错误类型时,CIN覆盖我的初始化值
- 为什么我在初始化b2World时必须使用新的运算符?-方框2d
- 无法在没有对象的情况下调用成员函数(尽管我相信我确实初始化了它)
- 为什么我需要使用std :: Move在Move-Constructor的初始化列表中
- 我正在收到错误的“ list :: ShowList”:功能风格的初始化器似乎是我的CPP文件中的函数定义'
- 我可以初始化一个数据成员,这些成员本身就是头文件中的类
- 我可以初始化另一个类中的类吗?
- C++ 为什么我可以初始化静态常量字符,但不能初始化类定义中的静态常量双精度
- 每当我尝试初始化Employer对象时,我的程序都会给出一个未处理的异常错误
- 如果构造函数正在初始化,我如何初始化对象的数组??C++
- 内联变量仿真:我可以使用全局静态引用来强制函数中静态变量的初始化顺序吗?
- 我可以在for循环的初始化中声明不同类型的变量吗?
- vpackage开发使用c++,我如何初始化我的包时,启动visual studio
- 'goto label'跳过了'unused'的初始化 - 为什么我为 std::string 获取它而不是 int?
- C++当我离开默认构造函数时,我的初始化字符串消失了,但我的其他成员变量值没有
- 为什么我可以初始化一个普通的Boost矩阵像一个标量矩阵