是否有另一种方法来显式初始化父类?
Posted
技术标签:
【中文标题】是否有另一种方法来显式初始化父类?【英文标题】:Is there another way to explicitly initialise parent class? 【发布时间】:2021-03-17 09:15:41 【问题描述】:我正在寻找一种在子类中完成一些更改后启动父类的方法。
例如:
class Parent
public:
Parent(stream f)
//some code
;
class Child : public Parent
public:
Child(string fileName) : Parent(???) // Line 10
//some code
;
在第 10 行,我应该给出使用“fileName”创建的 fstream。 我在哪里可以创建这个流变量?
【问题讨论】:
您可以在???
所在的位置创建它。 Parent(std::fstream(filename))
Where can I create this stream variable?
在???
创建它有什么问题?
但是当涉及到更复杂的工作时,我不能只用一个函数/行来做到这一点。
But when it comes to more complicated work, I couldn't do this in just one function/line.
为什么你认为会这样?您需要展示一个示例,说明您认为在哪种情况下它不起作用。
或者直接调用lambda。
【参考方案1】:
cmets 已经展示了一种可能的方法,所以你可以这样做:
#include <fstream>
#include <string>
class Parent
public:
Parent(std::fstream f)
// some code
;
class Child : public Parent
public:
// Do it like this:
Child(std::string fileName) : Parent(std::fstream(fileName))
// some code
;
还有一点:Parent
显然需要是Child
的直接基类,所以我相应地修改了代码。否则它不会编译。
【讨论】:
这不太可能奏效,因为std::fstream
不可复制。
嗯,它在我的机器上与 GCC 9 配合得很好。我什至可以从Parent
的构造函数中的文件流中读取一些内容,如下所示:Parent(std::fstream f) std::string s; std::getline(f, s); std::cout << s << std::endl;
看起来不需要复制。以上是关于是否有另一种方法来显式初始化父类?的主要内容,如果未能解决你的问题,请参考以下文章
是否有另一种方法可以在 Eloquent 模型上“设置连接”?
是否有另一种方法可以在 PHP 中编写字符串文字(不带 ' 或 ")?
是否有另一种方法可以从 Spring MVC 中的 HttpServletRequest 对象获取用户的时区? [复制]
是否有另一种方式(更有效的方式)来编写代码,以便它可以运行得更快?