제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;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
클릭 이벤트의 누적 귀속, 클릭 한 번, 여러 번 실행최근에 업무상 클릭 이벤트가 누적되는 문제에 부딪혔다. 요소에 클릭 이벤트 효과를 추가하지만 항상 효과가 실패한다. 마지막으로 클릭 이벤트가 여러 차례 실행된 것을 발견했다. 인터넷에서 찾아봤는데 다음은 이 문제를 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.