C++中如何重载输入输出流运算符使其可用于矩阵的输入输出?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++中如何重载输入输出流运算符使其可用于矩阵的输入输出?相关的知识,希望对你有一定的参考价值。

代码如下,怎么改:

class Matrix

public:
Matrix();
friend istream& operator >> (istream&,Matrix&);
friend ostream& operator << (ostream&,Matrix&);
friend Matrix operator + (Matrix &a,Matrix &b);
private:
int term[2][3];
;

Matrix::Matrix()

int i,j;
for (i=0;i<=1;i++)

for (j=0;j<=2;j++)

term[i][j]=0;




Matrix operator + (Matrix &a,Matrix &b)

int i,j;
Matrix c;
for (i=0;i<=1;i++)

for (j=0;j<=2;j++)


c.term[i][j]=a.term[i][j]+b.term[i][j];


return c;


istream & operator >> (istream & input,Matrix & a)

int i,j;
for (i=0;i<=1;i++)

for (j=0;j<=2;j++)

input>>term[i][j];


return input;


ostream & operator << (istream& output,Matrix& a)

int i,j;
for (i=0;i<=1;i++)

for (j=0;j<=2;j++)

output<<term[i][j];


return output;


int main()

Matrix a,b,c;
cout<<"a-->Input:"<<endl;
cin>>a;
cout<<"a="<<a<<endl;
cout<<"b-->Input:"<<endl;
cin>>b;
cout<<"b="<<b<<endl;
cout<<"c="<<c<<endl;
c = a + b;
cout<<"c=a+b="<<c<<endl;

可以将矩阵封装成一个类,然后重载该类的输入输出函数。

参考代码如下:

class matrix

    public:
        int ** p;
        int x,y;
        matrix(int m, int n)
        
            x = m;
            y = n;
            p = new int*[x];
            for(int i = 0; i < x; i ++)
                p[i] = new int[y];
        
;//定义类。
istream & operaroy >> (istream & in, matrix & v)//重载输入>>。

    for(int i = 0; i < x; i++)
        for(int j = 0; j < y; j++)
            in>>v.p[i][j];
    return in;


ostream &operator<<(ostream & out, const matrix &v)//重载输出<<。

    for(int i = 0; i < x; i++)
    
        for(int j = 0; j < y; j++)
            out<<v.p[i][j]<< \',\';
        out << endl;
    
    return out;
参考技术A #include<iostream>
using namespace std;
class Matrix                                                           

public:
    Matrix();
    friend istream& operator >> (istream&,Matrix&);
    friend ostream& operator << (ostream&,Matrix&);
    friend Matrix operator + (Matrix &a,Matrix &b);
private:
    int term[2][3];
;

Matrix::Matrix()

    int i,j;
    for (i=0;i<=1;i++)
    
        for (j=0;j<=2;j++)
        
            term[i][j]=0;
        
    


Matrix operator + (Matrix &a,Matrix &b)

    int i,j;
    Matrix c;
    for (i=0;i<=1;i++)
    
        for (j=0;j<=2;j++)
        
            
            c.term[i][j]=a.term[i][j]+b.term[i][j];
        
    
    return c;


istream & operator >> (istream & input,Matrix & a)

    int i,j;
    for (i=0;i<=1;i++)
    
        for (j=0;j<=2;j++)
        
            input>>a.term[i][j];
        
    
    return input;


ostream & operator << (ostream& output,Matrix & a)

    int i,j;
    for (i=0;i<=1;i++)
    
        for (j=0;j<=2;j++)
        
            output<<a.term[i][j];
        
    
    return output;


int main()

    Matrix a,b,c;
    cout<<"a-->Input:"<<endl;
    cin>>a;
    cout<<"a="<<a<<endl;
    cout<<"b-->Input:"<<endl;
    cin>>b;
    cout<<"b="<<b<<endl;
    cout<<"c="<<c<<endl;
    c = a + b;
    cout<<"c=a+b="<<c<<endl;

追问

用VC++6.0编译还是出错,提示为:fatal error C1001: INTERNAL COMPILER ERROR

追答

这个不是代码问题报错。

而是你工程类型和设置决定了,必须使用“预编译头文件“

如果其它设置没错,那么在你的代码最上边一行加上:

#include "stdafx.h"

呵呵,上面已经告诉你了,”其它设置错误“
去掉stdafx包含,然后这样设置吧:
在project->setting->c/c++ ->category里选 precompiled header
选not using precompiled header,确定,重新编译。

追问

还是不行,有其他解决办法么?

追答

重建一个配置正确的工程。

本回答被提问者采纳

C++ 输入/输出运算符重载

C++ 能够使用流提取运算符 >> 和流插入运算符 << 来输入和输出内置的数据类型。您可以重载流提取运算符和流插入运算符来操作对象等用户自定义的数据类型。

在这里,有一点很重要,我们需要把运算符重载函数声明为类的友元函数,这样我们就能不用创建对象而直接调用函数。

下面的实例演示了如何重载提取运算符 >> 和插入运算符 <<。

当上面的代码被编译和执行时,它会产生下列结果:

$./a.out

Enter the value of object:

70

10

FirstDistance: F :11 I :10

SecondDistance:F :5 I :11

ThirdDistance:F :70 I :10


以上是关于C++中如何重载输入输出流运算符使其可用于矩阵的输入输出?的主要内容,如果未能解决你的问题,请参考以下文章

C++重载IO输入输出流运算符

C++重载IO输入输出流运算符

C++重载IO输入输出流运算符

C++重载IO输入输出流运算符

C++重载IO输入输出流运算符

C++重载IO输入输出流运算符