⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 int_array.cpp

📁 ThinkingC++中文版
💻 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 + -