- 论坛徽章:
- 0
|
不好意思 格式不易观看 对不起大家我重新来一遍
- int MyStrLen(char * cstr);
- class String
- {
- public:
- String(int = 0 ); //带参数int型构造函数 参数为int型 初值为0
- String(String &s); //拷贝构造函数
- String (char *str); //带参数指针型(指向char型)的构造函数
- int strlen(); //成员函数返回值是length
- char * cstr(); //成员函数返回值是指针cstr所指向的内容
- ~String(); //析构函数
- private:
- char *content;
- int length;
- };
- String::String(int len) //分配含有len+1个char类型元素的数组
- {
- content = NULL;
- length = 0;
- if (len > 0)
- content = new char [len+1];
- if (NULL != content)
- length = len;
- }
- String::String(String &s)
- {
- length = s.strlen();
- if (length > 0)
- {
- char *src = s.cstr();
- int i = 0;
- content = new char [length+1];
- while (0 != *src)
- {
- *(content + i) = *src;
- src++;i++;
- }
- *(content + i) = 0;
- }
- }
- String::String(char * str)
- {
- int i;
- length = MyStrLen(str);
- if(length > 0)
- content = new char [length+1];
- for(i = 0; i < length; i ++)
- {
- *(content+i) = *(str+i);
- }
- *(content + i) = 0;
-
- }
- int String::strlen()
- {
- return length;
- }
- char * String::cstr()
- {
- return content;
- }
- String ::~String()
- {
- if (NULL != content)
- delete [] content;
- }
- int MyStrLen(char * cstr)
- {
- int len = 0;
- while ((NULL != cstr)&&('\0' != *cstr)&&(cstr++))
- len ++;
- return len;
- }
- void main()
- {
- String str("This is string 1\n");
- String str2 = str;
- String str3(str2);
- String str4 = "This is string 4\n";
- str4 = "can change?";
- str3 = str4;
- char* pch = str3.cstr;
- int len = str.strlen();
- cout<< pch<< endl;
- cout<< "length is :"<< len<<endl;
- }
复制代码 问题是主函数中
String str("This is string 1\n"); //这调用哪个成员函数 什么意思 参数为字符串 实际传的是指向字符串第一个字符的指针吗
String str2 = str; //用的是拷贝构造函数吧
String str3(str2); //这和上句实际一样吗
String str4 = "This is string 4\n"; //这又和第一句有什么关系 求详解头很晕~
再请问下大侠们 为什么这程序存在指针悬挂的问题,为什么说输出不方便,总是要调用接口obj.cstr(),或者obj(), |
|