【发布时间】:2018-05-30 13:29:38
【问题描述】:
我正在尝试使用我在另一个课程中编写的课程。问题是我很难使用原始类中的默认参数/构造函数以外的任何东西。
我已经简化了下面的类以显示我想要实现的目标(我已经尝试了所有我能想到的变体,但我认为基本上我不明白发生了什么)。
当我通过 class_one 调用 class_two 时,我想使用自己的值进行计算。但是,当我尝试这样做时,我只会得到用 class_two 编写的默认参数。
class class_one {
private:
double a;
class_two class2;
public:
class_one(double A = 0.5, double B = 0.2) {
a = A;
class2 = class_two(b);
}
double calculation(){
return A*class2.get_b();
}
}
class_two 会在哪里,
class class_two {
private:
double b;
public:
class_two(double B = 0.5){
b = B;
}
double get_b(){
return b;
}
}
我正在尝试运行的示例,
class_one().calculation();
actual output: A*B = 0.5 * 0.5 (Where the B values comes from class_two)
desired output: A*B = 0.5 * 0.2 (Where the B values comes from class_one)
抱歉,这似乎是一个超级简单的问题,但我无法让它发挥作用!
【问题讨论】:
-
一个类的数据成员在构造函数体开始之前被完全初始化。如果要指定默认构造函数以外的初始化,则需要使用member initializer list。
-
构造函数中有
B和b。cosmology是什么? -
好的,谢谢,当我试图在这里找到解决方案时,我一直遇到这个问题。问题是我不明白成员初始化列表是什么,我希望有一个更简单的解决方案。我现在会尝试理解这一点。你认为我应该删除我的问题吗?
-
"更简单的解决方案" - 没有什么比成员初始化列表更简单的了,它基本上是
class_one(double A = 0.5, double B = 0.2) : a(A), class2(B) { }而不是你当前的构造函数。 -
但是你的问题不在这里......一旦错别字被修复,你的代码工作正常(wandbox.org/permlink/819PMdAORhuO08xO)......你需要提供一个重现问题的例子(并且你测试过,即在发布之前编译并运行)。
标签: c++ class oop variable-assignment