12.复数类重载<< >>string类iterator迭代器

Posted 为了财务自由!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了12.复数类重载<< >>string类iterator迭代器相关的知识,希望对你有一定的参考价值。

class CComplex

public:
	CCOmplex(int r=0,int i=0)
		:mreal(r),mimage(i)
	
	//指导编译器如何做CComplex类对象的加法操作
	CComplex operator+ (const CComplex& com)
	
		CComplex comp;
		comp.mreal = this->mreal + src.mreal;
		comp.mimage = this->mimage + src.mimage;
		return comp;
	
private:
	int mreal;
	int mimage;
:

编译器优先考虑成员方法(重载),没找到,那么去全局找!

//重载<< 输出类对象的值到命令行
ostream& operator<< (ostream& out, const CComplex& src)

	out << "mreal:" << src.mreal << " mimage:" << src.mimage << endl;
	return out;

istream& operator>>(istream& in,CComplex& src)

	in >> src.mreal >> srcmimage;
	return in;

//但是这写在类内是不行的!
//需要在类中写:
//friend ostream& operator<< (ostream& out, const CComplex& src);
//friend istream& operator>>(istream& in,CComplex& src);

string类

class String

public:
	String(const char* p=nullptr)
	
		if(p!=nullptr)
		
			_pstr = new char[strlen(p)+1];
			strcpy(_pstr,p);
		
		else
		
			_pstr = new char[1];
			*_pstr = '\\0';
		
	
	~String()
	
		delete[] _pstr;
		_pstr = nullptr;
	
	String(const String& str)
	
		_pstr = new char(sizeof(str._pstr)+1);
		strcpy(_pstr,str._pstr);
	
	String& operator=(const String& src)
	
		if(this == &src)
			return *this;
		delete[] _pstr;

		_pstr = new char[strlen(str._pstr.size)+1];
		strcpy(_pstr,str._pstr);
		return *this;
	
	bool operator>(const String& str)const
	
		return strcmp(_pstr,str._pstr)>0;
	
	bool operator<(const String& str)const
	
		return strcmp(_pstr,str._pstr)<0;
	
	bool operator==(const String& str)const
	
		return strcmp(_pstr,str._pstr)==0;
	
	int length()const
	
		return strlen(_pstr);
	
	char& operator[](int index)
	
		return _pstr[index];
	
	const char& operator[](int index)const
	
		return _pstr[index];
	
	const char* c_str()const
	
		return _pstr;
	
	//给String字符串类型提供迭代器的实现
	class iterator
	
	public:
		iterator(char* p=nullptr):_p(p)
		bool operator!=(const iterator& it)
		
			return _p!=it._p;
		
		void operator++()
		
			++_p;
		
		char& operator*()
		
			return *_p;
		
	private:
		char* _p;
	;
	iterator begin()//返回容器首元素的迭代器表示
	
		return iterator(_pstr);
	
	iterator end()//返回容器末尾元素后继位置的迭代器表示
	
		return iterator(_pstr+length());
	
private:
	char* _pstr;
	
	friend String+(const String& lhs,const String& rhs);
	friend ostream& operator<< (ostream& out, const CComplex& src);
;
//以下函数效率低下,等待优化!
//优化了一点,但是不够:(右值引用的时候继续优化!)
String operator+(const String& lhs,const String& rhs)

	//char* ptmp = new char[strlen(lhs._pstr)+strlen(rhs._pstr)+1];
	String tmp;
	tmp._pstr = new char[strlen(lhs._pstr)+strlen(rhs._pstr)+1];
	strcpy(tmp._pstr,lhs._pstr);
	strcat(tmp._pstr,rhs._pstr);
	//String tmp(ptmp);//调用构造,开辟内存,效率低下
	//delete[] ptmp;
	return tmp;

ostream& operator<< (ostream& out, const CComplex& src)

	out << "mreal:" << src.mreal << " mimage:" << src.mimage << endl;
	return out;

int main()

	String str1 = "hello world!";
	String::iterator it = str.begin();
	for(;it!=str.end();++it)
	
		cout << *it << " ";
	
	cout << endl;
	
	//C++11 foreach的方式来遍历容器内部元素的值
	//底层还是通过迭代器实现的,也就是说遍历的对象必须有迭代器
	for(char ch : str1)
	
		cout << ch << " ";
	
	cout << endl;

	return 0;

泛型算法接受的都是迭代器
泛型算法-全局的函数-给所有的容器使用
泛型算法-有一套方式,能够统一的遍历所有的容器元素-迭代器

以上是关于12.复数类重载<< >>string类iterator迭代器的主要内容,如果未能解决你的问题,请参考以下文章

复数类重载加法减法和乘法运算符

sdut 4-1 复数类的运算符重载

YTU 2443: C++习题 复数类--重载运算符3+

YTU 2441: C++习题 复数类--重载运算符2+

C++--操作符重载 复数类

重载运算符,让你的复数类使用起来更加方便