제18장 38 총결산

4903 단어 총결산
// 38  

#include <iostream>

using namespace std;

class String

{

public:

	String(); //       

	~String(){ delete []str; len=0; cout<<"      "<<endl; }

	String(const char*const ch); //     string

	

	int getlen()const { return len;}   //    

	//const char *getstr()const{ return str;} //     



	//      

	friend ostream&operator<<(ostream &o, const String &s)

	{

		o<<s.str;

		return o;

	}

    

	friend istream&operator>>(istream &i, String &s)

	{

		 i>>s.str;

	     return i;

	}

	//                ,           

	//              

	friend bool operator<(const String&str1, const String&str2)

	{

		if(strcmp(str1.str, str2.str) < 0){

		    return 1;

		}else

			return 0;

	}

	friend bool operator>(const String&str1, const String&str2)

	{

		if(strcmp(str1.str, str2.str) > 0){

		    return 1;

		}else

			return 0;

	}

	friend bool operator==(const String&str1, const String&str2)

	{

		if(strcmp(str1.str, str2.str) == 0){

		    return 1;

		}else

			return 0;

	}





	//        

	char &operator[](unsigned short int  length);

	char  operator[](unsigned short int  length)const;



	//      

	String (const String&r);



	//       =

	String &operator=(const String &s);



	String operator+(const String&s); //       

	void operator+=(const String&s); //       

	



private:

	String(unsigned short int); //     string

	unsigned short int len;

	char *str;

};

//      str  

String::String()

{

    len = 0;

	str = new char[1];

	str[0] = '\0';

};

String::String(const char*const ch)

{

	cout<<"          "<<endl;

	len = strlen(ch);

	str = new char[len+1];

	for(int i=0; i<len; i++){

	   str[i] = ch[i];

	}

	str[len] = '\0';

};





String::String(unsigned short int lenght)

{

	cout<<"   int       "<<endl;

	len = lenght;

	str = new char[len+1];

	for(int i=0; i<=len; i++){

	   str[i] = '\0';

	}

};



char & String::operator[](unsigned short int length)

{

	    if(length > len){

		   return str[len-1]; //        

		}else{

		   return str[length];

		}

};



char String::operator[](unsigned short int length)const

{

	    cout<<"     const  "<<endl;

		if(length > len){

		   return str[len-1]; //        

		}else{

		   return str[length];

		}

};



String::String (const String&rs)

{

	len = rs.getlen();

	str = new char[len+1];

	for(int i=0; i<len; i++){

	    str[i] = rs[i]; 

		//                        ,   ,         ,     rs   operator[]const     ,             ,              

		//      operator[]     ,         ,            const

		//         const  ,   rs

		//    2      ,      ,     const  ,     ,              

	}

	str[len]='\0';

	cout<<"        :"<<str<<endl;



};



String& String::operator=(const String &s)

{

	cout<<"operator=  "<<endl;

	if(this == &s)

	{

	    return *this;

	}else{

	    delete []str; //        

		len = s.getlen();

		str = new char[len+1];

		for(int i=0; i<len; i++){

		    str[i] = s[i];

		}

		str[len] = '\0';

	}

	return *this; //       ,     

}



String String::operator+(const String &s)

{

	cout<<"operator+  ......"<<endl;

	int total = len + s.getlen();

	String temp(total);

	int i, j;

	for(i=0; i<len; i++){

	     temp[i] = str[i];

	}

	for(j=0; j<s.getlen(); j++, i++){

	    temp[i] = s[j];

	}

	return temp;

}







void String::operator+=(const String&s)

{

	cout<<"       +=   "<<endl;

	int total = len + s.getlen();

	String temp(total);

	int i, j;

	for(i=0; i<len; i++){

	    temp[i] = str[i];

	}

	for(j=0; j<s.getlen(); j++,i++){

	    temp[i] = s[j];

	}

	*this = temp;

}





int main()

{

	//1           

	String s1 = "hello wordl";

	//2          

	cout<<"s1     :"<<s1.getlen()<<endl;

	//3            

	String s2;

	s2 = s1;

	//4          

	cout<<s1<<s2<<endl;



	//5          ,     

	//cin>>s1>>s2;

	//cout<<s1<<s2<<endl;



	//6   char      String

	char ch[11] = "not at all";

	s1 = ch;

	cout<<s1<<endl;



	//7              

	String s3;

	String s4("mother");



	//8              

	cout<<s4<<endl;

	cout<<s4[0]<<endl;



	//9     

	s1 > s2;



	//10         

	s1="aaa";

	s2="bbb";

	s3 = s1 + s2;

	cout<<"s3:"<<s3<<endl;



	//12    +=  

	s1 += s2;

	cout<<"s1:"<<s1<<endl;

	String s5("a");

	s1 = s5;

	cout<<"s1:"<<s1<<endl;

	

	return 0;

}


좋은 웹페이지 즐겨찾기