从同一文件构建基类和继承类
Constructing base class and inherited class from the same file
我有一个简单的设置;两个类,一个是从另一个类中继承的。在继承的类中,我想从文件中读取并构建对象,但是我的问题是,由于必须在构造函数正文之前初始化基类,因此在启动器列表中,我必须两次打开文件。我只想打开一次文件,读取所需的数据,关闭文件,然后初始化继承的对象。
有一个不错的方法吗?我的代码目前看起来像这样,并打开文件两次:
#include <utility>
#include <fstream>
using namespace std;
class foo{
protected:
int _a;
public:
foo(int a) : _a(a) {}
};
class bar : public foo{
private:
int _b;
pair<int, int> read_bar(string file_name) { // get a and b from a file }
public:
bar(string file_name) : foo(read_bar(file_name).first), _b(read_bar(file_name).second) {}
};
我希望能够做一对初始化之类的事情,看起来像:
bar(string file_name) : (foo, _b)(read_bar(file_name)) {}
或读取文件后的功能体内的初始foo。如何才能做到这一点?我想到read_bar可以初始化_b,然后通过int构造foo?但这似乎是不合逻辑的,在多种继承的类似情况下也无济于事。
这是我的第一个问题,因此请说明我如何问问题或书面代码是否有任何错误。
我建议使用委派构造函数。
bar(string file_name) : bar(read_bar(file_name)) {} // Delegate to the next constructor.
bar(pair<int, int> in) : foo(in.first), _b(in.second) {}
ps
除非您有理由使read_bar
成为非static
成员函数,否则我建议将其作为static
成员函数。在我看来,该功能不需要任何特定实例的逻辑。
foo::_a
是protected
,因此bar
可以直接访问它。您可以使用默认值构造foo
,并且在阅读文件后更新_a
。
#include <utility>
#include <fstream>
using namespace std;
class foo {
protected:
int _a;
public:
foo(int a) : _a(a) {}
};
class bar : public foo {
private:
int _b;
pair<int, int> read_bar(string filename) {
// get a and b from a file
}
public:
bar(string file_name) : foo(0) {
pair<int, int> values = read_bar(file_name);
_a = values.first;
_b = values second;
}
};
相关文章:
- C++ 继承:基类中重载 operator+ 的 2 次在派生类中无法正常工作
- 使用 "using" 关键字继承基类的复制和移动构造函数
- 获取继承基类类型的元组
- C++:继承基类方法
- 当我们想要私下继承基类时,为什么要进行名称公开
- 继承基类,定义基类的原型方法,但从第三个对象调用子类的方法
- C++继承基类使用派生类的成员
- C++-Do派生类继承基类的静态成员
- C++ OOP 体系结构:决定是从基类声明对象还是继承基类
- 继承基类时遇到问题
- 继承基类的一部分
- 我不希望派生类继承基类的构造函数
- 派生类继承基类赋值运算符
- C++继承基类析构函数
- 派生类是否继承基类使用的前向声明?
- 我继承基类以及多重继承的超类
- c++中的派生类构造函数可以继承基类构造函数吗?
- 继承的问题:派生类不继承基类
- 使子类继承基类的现有实例
- c++防止继承基类的特定公共成员