c++ - 类中的常量成员
问题描述
我有这堂课:
class model
{
private:
link_list list;
float parameter_B1;
float parameter_B0;
public:
model();
float getparameter_B1() const;
float getparameter_B0() const;
float predict();
void info();
};
其中float parameter_B1
和float parameter_B0
是常量,但为了初始化它们,我必须进入构造函数主体并读取一个文件并使用该文件的数据来查找这两个属性的值,但是一旦我设置它们,它们就不会再改变了。(所以我猜他们算作常数)
像这样:
model::model()
{
char filename[300];
cout << "enter file name(path\\filname.txt):" << endl;
cin >> filename;
FILE* fp;
fp = fopen(filename, "r+");
float x, y;
if (fp == NULL)
{
cout << "Unable to open the file!" << endl;
exit(EXIT_FAILURE);
}
else
{
while (!feof(fp))
{
if (fscanf(fp, "%f\t%f", &x, &y) == 2)
{
Pair p(x, y);
list.insertNewNode(p);
}
}
}
Pair _average = list.average();
parameter_B1 = list.parameters1(_average);
parameter_B0 = list.parameters2(_average, parameter_B1);
}
但如果我将我的课程改为:
class model
{
private:
link_list list;
const float parameter_B1;
const float parameter_B0;
public:
model();
const float getparameter_B1() const;
const float getparameter_B0() const;
float predict();
void info();
};
我将收到这些错误“model::model()”未提供初始化:
1. 常量成员“model::parameter_B1”
2. 常量成员“model::parameter_B0”
,但如您所见,我不能使用初始化列表。
我应该怎么办?不是声明常量变量是我唯一的解决方案吗?
解决方案
使用委托构造函数,您可能会这样做
std::tuple<link_list, float, float> read_model_file()
{
char filename[300];
cout << "enter file name(path\\filname.txt):" << endl;
cin >> filename;
// ...
Pair _average = list.average();
parameter_B1 = list.parameters1(_average);
parameter_B0 = list.parameters2(_average, parameter_B1);
return {std::move(list), parameter_B0, parameter_B1};
}
class model
{
private:
link_list list;
const float parameter_B0;
const float parameter_B1;
public:
model() : model(read_model_file()) {}
model(std::tuple<link_list, float, float> t) :
list(std::get<0>(std::move(t))),
parameter_B0(std::get<1>(std::move(t))),
parameter_B1(std::get<2>(std::move(t)))
{}
// ...
};
推荐阅读
- java - 如何使用 jedis for Java 连接到 Docker Redis 集群实例?
- django - 如何在不覆盖以前数据的情况下将选定数据从一个表临时保存到另一个表?
- nativescript - Nativescript UI 未更新
- scala - 在像 scala 这样的函数式编程语言中,停止迭代集合的方法是什么?例如; 如果给定包含 0,则返回 true
- python - 如何在 Flask SQLAlchemy 中递归获取孩子?
- sql - 带有名称和 empID 的 Oracle Case 语句
- java - 在Java中打印小数点后1位
- eclipse - 如何判断eclipse项目的成熟度
- ios - MacOS - iOS 模拟器:如何禁用模拟器上的新工具栏?[包含图片]
- visual-studio-code - 出现错误 - ASL CLI 不起作用 - 未知选项“-l”