真的是很简单的代码。。。求大神看看怎么改

叶子君 2014-04-06 10:37:41
/*
Project:扩充Diagonal Matrix类,增加以下共享成员—输入、输出、加、减、乘、矩阵转置函数
(注意每种函数所得到的结果是一个用一维数组表示的对角矩阵)。重载<<,>>,+,-,*
测试代码,每个函数的时间复杂度是多少?
我的问题:1.加减法函数运行时报错2.转置函数编译不通过3.在VC下把数据成员都设置成public才过。。本来想声明成private的
*/
#include<iostream>
using namespace std;

template <class T>
class DiagonalMatrix
{
friend ostream & operator<<(ostream &, DiagonalMatrix<T> &);//重载<<
friend istream & operator>>(istream & ,DiagonalMatrix<T>&);//重载>>
public:
DiagonalMatrix(int size=10)
{n=size;d=new T[n];}
~DiagonalMatrix(){delete []d;}
DiagonalMatrix<T>&
Store(const T&x, int i,int j);//存储
T Retrieve(int i,int j)const;//获取数据

DiagonalMatrix<T> operator +(DiagonalMatrix<T> &a);//, DiagonalMatrix<T> &b );
DiagonalMatrix<T> operator -(DiagonalMatrix<T> &a);//, DiagonalMatrix<T> &b );
DiagonalMatrix<T> operator *(DiagonalMatrix<T> &a);//, DiagonalMatrix<T> &B );
void Transpose(DiagonalMatrix<T> &a);//转置


int n;//矩阵维数
T *d;//存储对角元素的一维数组
};

template <class T>
DiagonalMatrix<T>&DiagonalMatrix<T>::Store(const T&x,int i,int j)//已有的存储函数
{
if (i<1||j<1||i>n||j>n)
throw OutOfBounds();
if (i!=j && x!=0) throw MustBeZero();
if(i==j)d[i-1]=x;
return *this;
}
template<class T>
T DiagonalMatrix<T>::Retrieve(int i,int j)const//已有的获取某位置数据の函数
{
if(i<1||j<1||i>n||j>n)
throw OutOfBounds();
if (i==j)return d[i-1];
else return 0;
}
template <class T>//输入完成!!
istream &operator>>(istream & in,DiagonalMatrix<T>&x)
{
cout<<"input n:";//可删?
cin>>x.n;
cout<<"enter elements:";
for (int i=0;i<x.n;i++)
in>>x.d[i];
return in;
}
template <class T>//输出完成!!
ostream &operator<<(ostream &out,const DiagonalMatrix<T> &x)
{
cout<<"output:"<<endl;
for(int i=0;i<x.n;i++)
{
for (int j=0;j<x.n;j++)
{
if(i==j)
cout<<x.d[i]<<" ";
else
cout<<0<<" ";
}
cout<<endl;
}
return out;
}

template<class T>//加完成!!
DiagonalMatrix<T> DiagonalMatrix<T>::operator + (DiagonalMatrix<T> &a)
{
if (n != a.n) throw SizeMismatch();
DiagonalMatrix<T> w(a.n);
for (int i=0;i<a.n;i++)
w.d[i]=d[i] + a.d[i];
return w;
}

template<class T>//减完成!!
DiagonalMatrix<T> DiagonalMatrix<T>::operator - (DiagonalMatrix<T> &a)
{
DiagonalMatrix<T> w(a.n);
for (int i=0;i<a.n;i++)
w.d[i]=d[i] - a.d[i];
return w;
}

template<class T>//乘完成!!
DiagonalMatrix<T> DiagonalMatrix<T>:: operator * (DiagonalMatrix<T> &a)
{
DiagonalMatrix<T> w(a.n);
for(int i=0;i<a.n;i++)
w.d[i]=d[i] * a.d[i];
return w;
}

template <class T>//转置
void DiagonalMatrix<T>:: Transpose(DiagonalMatrix<T> &a)
{
for (int i=0;i<a.n;i++)
cout<<a.d[i];
}

int main()
{
DiagonalMatrix<int> CS(5);

cin>>CS;//运算符已经重载
cout<<endl;

cout<<CS;//运算符已经重载
cout<<endl;

DiagonalMatrix<int> CC(5);//为二元运算符添加另一个对象

cin>>CC;
cout<<endl;

cout<<CC;
cout<<endl;

cout<<CS + CC<<endl;

cout<<CS - CC<<endl;

cout<<CS * CC<<endl;

Transpose(CS);

return 0;
}
...全文
174 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
叶子君 2014-04-10
  • 打赏
  • 举报
回复
引用 2 楼 todo9351 的回复:
代码风格,代码风格啊,亲,这样贴上来怎么看,你用VC VS看得爽,这样怎么看啊。 另,问题一上来就简单,那我们答上来是没水平,还是有水平?
对不起,我没有注意粘上来的时候会有格式的变化~我只是觉得代码没有大的问题,所以才说简单,这个是挺客观的吧~真的没有别的意思,你如果改好了当然是有水平啦!谢谢你的意见!不过已经改好啦,已结贴~就不劳烦您了。
todo9351 2014-04-08
  • 打赏
  • 举报
回复
代码风格,代码风格啊,亲,这样贴上来怎么看,你用VC VS看得爽,这样怎么看啊。 另,问题一上来就简单,那我们答上来是没水平,还是有水平?
707wk 2014-04-07
  • 打赏
  • 举报
回复
c路过,看不懂c++语法。。。

64,651

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧