📄 int_array.cpp
字号:
#include "iostream.h"
#include <memory.h>
#include <process.h>
class array{
private:
int* p;
int size;
public:
array(int size1=50)
{
p=new int[size=size1];
}
int& operator[](int i) const
{ if(i<0 || i>=size) {
cout<<"下标越界!"<<endl;
exit(1);
}
return p[i];
}
//array a(10); a[0] = 1;第一个参数必须是a,所以[]必须是成员运算符
//见ostream& operator<<(ostream& out,const array& ob) , 所以必须是const member function
//为什么返回int&??
array& operator=(const array& arr)
{
// 检查对自己赋值的情况
if (this == &arr)
return *this;
delete[] p;
p = new int[size=arr.size];
::memcpy(p,arr.p,size*sizeof(int));
return *this;
}
//问题(1)系统按照逐域拷贝原则自动生成的复制函数
/*{
p = arr.p;
size = arr.size;
return *this;
}
*/
//问题(2)如果允许全局性地定义运算符‘=’,那么
/*
complex a;
a=3; operator=(a,3)
3=a; 编译也通过, operator=(3,a)
//这是绝对不允许的,编译器通过强制运算符‘=’为成员函数而避开这个问题。
*/
//问题(3)为什么不返回const array&
/*因为希望这样的代码有效
(a=b).fun();
(w1 = w2) = w3;
*/
int getsize() const
{
return size;
}
~array()
{
delete[]p;
}
void fun()
{
}
friend istream& operator>>(istream& in,array& ob); //int_array a(10); cin>>a;因为第一个对象是cin,故重载成友员函数
friend ostream& operator<<(ostream& out,const array& ob);
};
istream& operator>>(istream& in,array& ob)
{
for(int i=0;i<ob.getsize();i++)
in >> ob[i];
return in; //为便于cin>>ob1>>ob2;所返回in本身
}
ostream& operator<<(ostream& out,const array& ob)
{
for(int i=0;i<ob.getsize();i++)
out << ob[i] << ","; //because ob is a const,so ob.operator[](i) must be const function
out << endl;
return out;
}
void main()
{
array a(10),b;
for(int i=0;i < a.getsize();i++)
a[i]=i; //a.operator[i]
cout << a;
array c(10);
c = a;
b = c = a; //b.operator=( c.operator=(a) )
// (b=a).fun();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -