重载运算符operator + , ++ , 输出ostream&

   重载运算符operator + 的实现 (实现的是字符串)

#include
#include
using namespace std;
//程序=算法+数据
//算法+数据==对象
//定义类:某一类事物的抽象(在草稿纸上描述人类)
class String
{
public:
	//构造器
	String();
	String(const char*);
	String(const String& s);//拷贝构造
	//接口:
	const char*  c_str()const;
	short length()const;//求该对象的长度
	//重载运算符:
	String operator+(String&);		//s1+s2===>s1.operator+(s2)
	String operator=(String& r);
	void show()
	{
		cout<str<str=new char('\0');
}
//有参构造
String::String(const char* p)    //用于第一次的初始化,将字符串复制到this->str中.
{
	cout<<"this=="<str=new char[ilen+1];
	if(NULL!=this->str)
	{
		memcpy(this->str,p,ilen+1);//sizeof 类型 空间长度;   strlen(元素)
	}	
}
//拷贝构造
String::String(const String& s)
{
	cout<<"String(String&)"<str=new char[  s.length() +1 ];
	if(this->str!=NULL)
	{
		memcpy(this->str,s.str,s.length()+1);
	}
	
}
short String::length()const
{
	int ilen=0;
	while(this->str!=NULL&&this->str[ilen++]!='\0');

	return ilen;
}
//返回数组首地址:常方法(只能读取内容,不能修改内容)
const char* String::c_str()const 	 //只读函数:只能读取,不能修改
{
	//this->str="abc";
	this->str[0]='1';
	return this->str;
}
String String::operator+(String& s)
{
	//实例化对象:有参构造
	String result;//分配空间   无参
	if(!result.str)    //如果result.str!=NULL,就释放掉result.str
	{
		delete[] result.str;
	}
	//分配空间
	result.str=new char[this->length() +s.length()+1];    //申请空间
	memcpy(result.str,this->str,this->length());          //将this->str复制给result.str
	memcpy(result.str+this->length()-1,s.str,s.length()); //将s.str复制给result.str+this->length()-1  (为什么加this->length(),因为是将s.str复制到result.str的后面,为什么 -1 因为考虑到字符串的末尾 '\0' 的字符)
	return result;
}
int main()
{
//实例化
	String s("abcde");
	//String s1(s);	//拷贝构造
	String s1("1234");
	//重载
	String s2= s+s1;//  s.operator+(s1)
	s2.show();

/*
//	String s("abcd");
	String s1;	//String s1=s   复制
	
//赋值:将s的内容赋值s1的内容   (要求:s和s1都必须存在)
	//s1=s;//引用对象
	//string aaa;
	//aaa=s;//对象不同
	
	s1=String("abcdeef");
	s1.show();

	"abcdef";//不会转换为无名对象
*/
}

   重载运算符实现  operator ++ 

        重载输入输出流:
        输出:<<
        输入:>>
        两个标准输出输出流:cout/cin分别是类ostream/istream的对象

#include
#include
using namespace std;

class Time
{
public:
	friend Time operator++(Time& t);
	Time(int,int,int);
	void show();
	Time operator--();
	Time operator--(int);
private:
	int hours;
	int minute;
	int second;
};

Time::Time(int h,int m,int s):hours(h),minute(m),second(s)
{
}

void Time::show()
{
	cout<   cout<<"1"------->cout<<"2"   就是cout<<"1"返回 "1" 后还返回一个cout,让后面的可以连续输出,所以返回void是不行的

所以需要添加 ostream& 的返回类型.
//2.返回类型 ostream& 就可以返回 cout , 后面就可以连续的调用 cout 就可以连续输出.
ostream& operator<<(ostream& output,Time& t)
{
	//私有
	output<调用 operator<<(cout,t1)===cout
    (cout< cout<cout

*/

int main()
{
	Time t1(22,58,56);
	//ut<调用  operator<<(cout,t1)<

 

你可能感兴趣的:(♬,--,C\C++)