如何cin到int _value:1; C ++

时间:2014-09-19 06:14:45

标签: c++ int cout cin

我尝试了一个代码,它想要使用1个字节的整数来保存数字,如何使用 cin 获取值,使用 cout

struct SoNguyen{
    int _value:1;
    void Input(){
         // How I can cin value to _value;
    }
    void Output(){
        // How I can cout value of _value;
    }
}
任何人都有提示。!!

2 个答案:

答案 0 :(得分:3)

struct SoNguyen{
    int _value:1;
    void Input(){
        int value;
        std::cin >> value;
        _value = value;
    }
    void Output(){
        std::cout << _value;
    }
};

整数不是1字节而是1位宽(想想为什么他们称这个功能位字段)。然而,位字段是糟糕的编程习惯,应尽可能避免。如果您需要宽度为1个字节的成员,请使用std::int8_tsigned char。如果你需要宽度为1位的那个,使用bool(即使你浪费了7位,它在现代平台上并不重要)。

实现类的输入/输出的更类似C ++的方法将包含运算符:

struct SoNguyen{
    int _value:1;
};
template<typename CharT, typename CharTraits>
std::basic_istream<CharT, CharTraits>& operator>> (std::basic_istream<CharT, CharTraits>& Stream, SoNguyen& Object)
{
    int Value;
    Stream >> Value;
    Object._value = Value;
    return Stream;
}
template<typename CharT, typename CharTraits>
std::basic_ostream<CharT, CharTraits>& operator<< (std::basic_ostream<CharT, CharTraits>& Stream, SoNguyen const& Object)
{
    return Stream << Object._value;
}

调用语法如下所示:

int main()
{
    SoNguyen foo;
    std::cin >> foo;
    std::cout << foo;
}

因此它看起来很直观(因为相同的语法也适用于基本类型)和模块化(您可以写入和读取任何流)。

答案 1 :(得分:2)

您必须阅读基本类型 - intcharshort。然后将基元类型分配给位字段。

void Input() {
   int i;
   std::cin >> i;
   _value = i;
}

void Input() {
   short i;
   std::cin >> i;
   _value = i;
}

输出很直接。

void Output() {
   std::cout << _value;
}