Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 运算符按位左移位_C++_C++11 - Fatal编程技术网

C++ 运算符按位左移位

C++ 运算符按位左移位,c++,c++11,C++,C++11,在使用数据流创建对象后,建议采用什么方法更新对象?我希望避免使用许多SetXX方法 假设我有一个这样的班级 class Model { public: Model(int, double, std::string); private: int a; double b; std::string c; }; 解决这个问题的一种方法是添加操作符 friend Model& operator<<(Model&, std::stringstream&)

在使用数据流创建对象后,建议采用什么方法更新对象?我希望避免使用许多SetXX方法

假设我有一个这样的班级

class Model
{
public:
  Model(int, double, std::string);
private:
  int a;
  double b;
  std::string c;
};
解决这个问题的一种方法是添加操作符

friend Model& operator<<(Model&, std::stringstream&)

<代码>朋友模型和操作符

我会考虑编写一个使用流而不是使用运算符的<代码>更新>代码>方法。正如您所说,使用运算符

model
更常用。

我建议遵循与标准库中相同的符号:使用
操作符>
输入并返回对流的引用,而不是
model
。通过这种方式,其他人(熟悉标准库但不熟悉您的符号)更容易阅读,并且允许链接输入:

friend std::istream & operator>>(std::istream & s, Model & m)
{
    m.data = ...
    return s;
}

Model m1, m2;
std::cin >> m1 >> m2;

由于
std::istringstream
是从
std::istream
派生而来的,因此此运算符将与所有其他输入流类型一样适用于它

从流中获取信息的常用方法是输入(或右移)操作符
>>
,因此您可以这样做,例如
流>>模型
,从任何其他流(如
std::cin
)获取输入。你的方式是可行的,但这是不寻常的,除了你自己(可能几个月后甚至连你自己都不知道)之外,其他人不容易理解或理解。你能解释一下为什么你想用与通常相反的方式来做吗?基本原理是什么?如果这是工作代码,那么这个问题可能更适合肯定是一个好问题,但是它可能更适合,因为它处理的是没有显示错误的工作代码。Joachim:没有真正的基本原理,只是做了感觉自然的事情。你的建议看起来不错。保罗:下次我会的。我不知道那个网站。我对setXX方法没有问题。在这种情况下,我需要一种方法来进行更新,并可以确定是否触发另一个订阅的信号。如果我改为使用运算符>>,您是否仍然喜欢使用更新方法?原因是什么?@Lars我还是喜欢更新方法。在我看来,
update
更清楚地说明了所做的事情,而不是更一般的
>
。不过,这可能是个人偏好(我有Java背景,不支持运算符重载)。
friend std::istream & operator>>(std::istream & s, Model & m)
{
    m.data = ...
    return s;
}

Model m1, m2;
std::cin >> m1 >> m2;