8_3.cpp

来自「c++书籍的源代码」· C++ 代码 · 共 95 行

CPP
95
字号
#include<iostream.h>
#include<stdlib.h>
class vect
{
 public:
   vect(int x=1);//构造函数
   vect(vect &s);//拷贝构造函数
   ~vect();      //析构函数
   vect& operator =(vect &s);
   int operator [](int i);
   int operator ()(int i);
   static void error(int n);
   friend vect operator +(vect &c1,vect &c2);
   friend ostream& operator <<(ostream& out,const vect &s);
   friend istream& operator >>(istream& in,const vect &s);
 private:
   int len;     //向量长度
   int *p;      
};
 vect::vect(int x)
{
  len=x;
  p=new int[len];
}
 vect::vect(vect &s)
{
  len=s.len;
  p=new int[len];
  for(int i=0;i<len;i++)
   *(p+i)=*(s.p+i);
}
 vect::~vect()
{
  delete []p; 
}
 vect& vect::operator =(vect &s)
{
  for(int i=0;i<len;i++)
   *(p+i)=*(s.p+i);
  return(*this);
}
 int vect::operator [](int i)
{
  if(i<=0||i>len)
    error(1);
  return(*(p+i-1)); 
} 
 int vect::operator ()(int i)
{
  if(i<=0||i>len)
    error(1);
  return(*(p+i-1)); 
}
 void vect::error(int n)
{
   if(n==1)
    cout<<"下标越界!"<<endl;
   else if(n==2)
	cout<<"向量长度不匹配!"<<endl;
   exit(1);
}
 vect operator +(vect &c1,vect &c2)
{
 if(c1.len!=c2.len)
  vect::error(2);
 vect m(c1.len);
 for(int i=0;i<m.len;i++)
  *(m.p+i)=*(c1.p+i)+*(c2.p+i);
 return(m);
}
 ostream& operator <<(ostream& out,const vect &s)
{
 for(int i=0;i<s.len;i++)
  out<<" "<<*(s.p+i);
 return(out);
}
 istream& operator >>(istream& in,const vect &s)
{
 cout<<"请输入向量的值:"<<endl;
 for(int i=0;i<s.len;i++)
  in>>*(s.p+i);
 return(in);
}
 int main()
{
 vect a(5),b(5),c(5);
 cin>>a>>b;
 cout<<a<<endl;
 cout<<b<<endl;
 cout<<"a[1]="<<a[1]<<" b(5)="<<b(5)<<endl;
 c=a+b;
 cout<<c<<endl;
 return(0);
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?