String 类的实现:c学习19- String类的实现
1.1 代码实现 (运算符“+”的重载 )
/* 运算符“+”的重载 */
String String::operator+ (const String &str){
String newString;
newString.length = length + str.size();
newString.data = new char[newString.length + 1];
strcpy(newString.data,data);//在类的成员函数中可以访问同类型实例对象的私有成员变量.
strcat(newString.data,str.data);
return newString;
}
1.2 代码测试(运算符“+”的重载 )
/* 测试运算符“+”的重载 */
void test_09_03(){
String str1("hello ");
String str2("world!");
(str1 +str2);
printf ("str1.size() = %d\n",str1.size());
printf ("str1.size() = %d\n",str1.size());
printf ("str1.c_str() = %s\n",str1.c_str());
printf ("str2.size() = %d\n",str2.size());
printf ("str2.c_str() = %s\n",str2.c_str());
printf ("(str1 +str2).size() = %d\n",(str1 +str2).size());
printf ("(str1 +str2).c_str() = %s\n",(str1 +str2).c_str());
}
1.3 测试结果 (运算符“+”的重载 )
2.1 代码实现 (运算符“=”的重载 )
/* 运算符“=”的重载 */
String& String::operator= (const String &str){
if (this == &str) return *this;
length = str.length;
delete []data;
data = new char[length+1];
strcpy(data,str.data);
return *this;
}
2.2 代码测试(运算符“=”的重载 )
void test_09_04(){
String str1("hello world!");
String str2;
printf ("str2.size() = %d\n",str2.size());
printf ("str2.c_str() = %s\n",str2.c_str());
str2= str1;
printf ("str1.size() = %d\n",str1.size());
printf ("str1.c_str() = %s\n",str1.c_str());
printf ("str2.size() = %d\n",str2.size());
printf ("str2.c_str() = %s\n",str2.c_str());
}
2.3 测试结果 (运算符“=”的重载 )
3.1 代码实现 (运算符“==”和“!=”的重载 )
/* 运算符“==”的重载 这里定义为内联函数加快运行速度。 */
inline bool String::operator== (const String &str) const {
if(length != str.length) return false;
return strcmp(data,str.data)?false:true;
}
/* 运算符“!=”的重载 这里定义为内联函数加快运行速度。 */
inline bool String::operator!= (const String &str) const {
if(length != str.length) return true;
return strcmp(data,str.data)?true:false;
}
3.2 代码测试(运算符“==”和“!=”的重载 )
/* 测试运算符“==”和"!="的重载 */
void test_09_05(){
String str1("hello");
String str2("hello");
String str3("world");
if(str1==str2) printf("str1==str2\n");
if(str1!=str2) printf("str1!=str2\n");
if(str1==str3) printf("str1==str3\n");
if(str1!=str3) printf("str1!=str3\n");
}
3.3 测试结果(运算符“==”和“!=”的重载 )