gpt4 book ai didi

C++ 用私有(private)变量定义 IO 成员变量

转载 作者:行者123 更新时间:2023-11-28 06:20:07 28 4
gpt4 key购买 nike

我目前正在为我的 c++ 类(class)介绍项目工作,但我被卡住了,我被告知在 istr 任何时候失败时将私有(private)变量设置为 CIN_ERROR(下面将发布代码)。

2个问题:

  1. 如何判断 istr 是否失败?
  2. 如何在定义成员函数时访问私有(private)变量? (我已经尝试确定它的范围,但它说无法访问)。

      std::istream& read(std::istream& istr){
    if (istr /*not sure how to check if istr failed*/){
    Date::_readErrorCode = CIN_FAILED;
    /*_readErrorCode is the private variable*/
    }
    }

函数定义为:

std::istream& read(std::istream& istr); /*it is within the same 
class as the rest, not sure if that helped*/

锻炼要求:从控制台读取以下格式的日期:YYYY/MM/DD(即 2015/03/24)。此功能不会提示任何内容。如果 istream (istr) 在任何时候失败,它会将 _readErrorCode 设置为 CIN_FAILED 并且不会清除 istream 对象。

注意:CIN_FAILED 只是定义值 3

最佳答案

要检查流是否失败,您可以使用 fail() 成员函数或仅转换为 bool。转换产生 true 当且仅当。 不失败()

请注意 good() 不是 fail() 的对立面。如果没有设置任何错误标志,good() 会产生 true,这尤其包括 EOF 标志。 fail() 仅检查 badbit。即,转换为 boolgood() 不同。

格式化读入的惯用法 while( stream >> variable ),使用到 bool 的转换,即它正在检查 fail() .


对于学术练习,您可能(或可能不会)处理流已配置为在失败时抛出异常的情况。在这种情况下,您还需要一个 try ... catch 结构。

这仅适用于学术,因为 iostream 异常抛出的设计完全不切实际,因此从未使用过:这不是实践中的考虑因素。遇到这样的野兽时,与其调整代码,不如找出负责的程序员并调整那个人。因此,它完全是学术性的,但处理它可能(或可能不需要)学术练习。


关于访问编译器告诉你不可访问的私有(private)变量,有技术解决方案(特别是 Johannes Schaub 的技巧,完全在普通类型检查规则内工作),但你需要这样的解决方案的机会是差不多的三只大象从天而降,表演着阿爸的“钱钱钱”。或者其他的东西。您更有可能打算在相关类的成员函数中执行此操作,或者使用该类的适当成员函数,而您根本没有提供任何相关信息。

关于C++ 用私有(private)变量定义 IO 成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29455313/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com