注册 登录
编程论坛 C++教室

m_Data(std::iostream & is) { is >> *this; }编译无法通过!求大佬解释下!

libinden71 发布于 2018-09-27 18:06, 2056 次点击
1.不是很明白整条语句的意思!
2.这构造函数什么时候会被执行?
3.常常会看到std::iostream & is 被作为参数时的作用是什么?假如需要输入直接调用cin 不就可以了吗?为什么要这么麻烦呢?
程序代码:


class m_Data
{
public:
    m_Data(std::iostream & is) { is >> this->m_nMax; }
    std::istream& operator >> (m_Data& per)
    {
        this->m_nMax=per.m_nMax;
    }
private:
    int m_nMax;
};
int main()
{
    m_Data s1(std::istream);//

    system("pause");
    return 0;
}

4.m_Data(std::iostream & is) 既然是从流中读取数据,那么 main中 创建对象时 无法输入数据 这又是为什么?
5.m_Data s1(std::istream); 这样写 编译是过去了!但是毫无意义啊!

求大佬帮忙回答下!谢谢!
2 回复
#2
rjsp2018-09-28 08:53
你这代码从哪里抄来的呢?
你为什么要去理解别人的这段梦游时敲出的代码?

正常的代码这样写
程序代码:
#include <iostream>

class Data
{
public:
    // 我也不知道这个没有public成员的类有什么用
private:
    int value_;

    friend std::istream& operator>>( std::istream& is, Data& data )
    {
        return is >> data.value_;
    }
    friend std::ostream& operator<<( std::ostream& os, const Data& data )
    {
        return os << data.value_;
    }
};

using namespace std;

int main( void )
{
    Data data;
    cin >> data;
    cout << data;
}

“3.常常会看到std::iostream & is 被作为参数时的作用是什么?假如需要输入直接调用cin 不就可以了吗?为什么要这么麻烦呢?”
------ 因为未必是从cin输入。明明写出的函数适用于一切的输入流,为什么要限定其只能用于cin?

5.m_Data s1(std::istream); 这样写 编译是过去了!但是毫无意义啊!
------ 这是声明了一个函数:函数名s1,返回类型m_Data,参数类型std::istream
#3
rohalloway2018-09-28 19:34
2.这构造函数什么时候会被执行?

在类创建实例的时候就会自动调用构造函数。
其它问题不懂
1