#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
class Matrix
{
public:
Matrix(){}
Matrix(int m,int n):a(m),b(n){}
friend ostream& operator << (ostream& out, const Matrix& mat);
friend istream& operator >>(istream& is, Matrix& f);
void putA(int m){a=m;}
void putB(int m){b=m;}
private:
int a,b;
};
ostream& operator << (ostream& out, const Matrix& mat)
{
out<<"mat.a="<<mat.a<<" "<<"mat.b="<<mat.b;
return out;
}
istream& operator >> (istream& in, Matrix& f) //不能为const哦,不然怎么输入数据嘞~吐舌头
{
int m=f.a;
int n=f.b;
in >> f.a >> f.b;
if (!in)
//输入操作符:需要处理错误和文件结束的可能性(加入了错误恢复措施)
{
cerr << "Wrong input!" << endl;
//cout<<f<<endl;
f.putA(m);
f.putB(n);
//cout<<"更改后:"<<f<<endl;
}
return in;
}
int main(int argc, char* argv[])
{
Matrix n(1,2);
cout<<n;
cin>>n;
*/
/*----代码二段 当用默认构造函数时,数据成员的值由系统确定
Matrix m;
cin>>m;
cout<<m;
*/
system("pause");
return 0;
}
#include <iostream>
#include <string>
using namespace std;
class Matrix
{
public:
Matrix(){}
Matrix(int m,int n):a(m),b(n){}
friend ostream& operator << (ostream& out, const Matrix& mat);
friend istream& operator >>(istream& is, Matrix& f);
void putA(int m){a=m;}
void putB(int m){b=m;}
private:
int a,b;
};
ostream& operator << (ostream& out, const Matrix& mat)
{
out<<"mat.a="<<mat.a<<" "<<"mat.b="<<mat.b;
return out;
}
istream& operator >> (istream& in, Matrix& f) //不能为const哦,不然怎么输入数据嘞~吐舌头
{
int m=f.a;
int n=f.b;
in >> f.a >> f.b;
if (!in)
//输入操作符:需要处理错误和文件结束的可能性(加入了错误恢复措施)
{
cerr << "Wrong input!" << endl;
//cout<<f<<endl;
f.putA(m);
f.putB(n);
//cout<<"更改后:"<<f<<endl;
}
return in;
}
int main(int argc, char* argv[])
{
/*----分别对代码1段和代码2段取消注释,验证不同构造函数下,数据成员的初始值-----*/
/*----代码1段:如果n数据成员初始值a=1;b=2;那么cin>>新的数据,如a=4.5;b=3;后,最后输出的是a=4;b=2;也就是说,处理完a(a本身输入不是int型,是错误的),n中a的值改了,然后代码执行if(!n)部分,后面>>b相当于没有执行,所以b保留原先的值不变-----*/
Matrix n(1,2);
cout<<n;
cin>>n;
*/
/*----代码二段 当用默认构造函数时,数据成员的值由系统确定
Matrix m;
cin>>m;
cout<<m;
*/
system("pause");
return 0;
}