能给我解释清楚吗?大侠们

发布于 2022-10-15 08:05:22 字数 4831 浏览 24 评论 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();                      //指向字符串的指针 将字符串的第一个字符传给scr
  int i = 0;
  content = new char [length+1];    //分配含有length+1个char类型元素的数组  深拷贝
  while (0 != *src)                          //字符串只要没结束 就循环
  {
   *(content + i) = *src;     //将scr指向的内容传到数组content
   src++;i++;       //指针移动 计数值加1
  }
  *(content + i) = 0;                     //将字符串最后赋为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()                                                 //返回对象长度的成员函数,类内部的成员函数可以访问私有变量 所以参数必须是String类
{
return length;
}
char * String::cstr()                                              //成员函数返回值是指针cstr所指向的内容
{
return content;
}
String ::~String()      //析构函数
{
if (NULL != content)
  delete [] content;
}
int MyStrLen(char * cstr)                                     //类外部函数返回值是长度 参数是指针 不是String类对象
{
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;
}
问题在主函数中 再请问下大侠们 为什么这程序存在指针悬挂的问题,为什么说输出不方便,总是要调用接口obj.cstr(),或者obj(),

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

左耳近心 2022-10-22 08:05:22

请用code贴代码

沉鱼一梦 2022-10-22 08:05:22

不是解释不清,是懒得解释,这看得太累了。。。

三岁铭 2022-10-22 08:05:22

无格式,别编程

日记撕了你也走了 2022-10-22 08:05:22

不好意思 格式不易观看 对不起大家我重新来一遍

  1. int MyStrLen(char * cstr);
  2. class String
  3. {
  4. public:
  5.         String(int = 0 );           //带参数int型构造函数 参数为int型 初值为0
  6.         String(String &s);        //拷贝构造函数
  7.         String (char *str);        //带参数指针型(指向char型)的构造函数
  8.         int strlen();                 //成员函数返回值是length
  9.         char * cstr();              //成员函数返回值是指针cstr所指向的内容
  10.         ~String();                  //析构函数
  11. private:
  12.         char *content;                 
  13.         int length;
  14. };
  15. String::String(int len)                 //分配含有len+1个char类型元素的数组
  16. {
  17.         content = NULL;
  18.               length = 0;
  19.         if (len > 0)
  20.         content = new char [len+1];
  21.         if (NULL != content)
  22.         length = len;
  23. }
  24. String::String(String &s)                    
  25. {
  26.         length = s.strlen();                 
  27.         if (length > 0)
  28.         {
  29.                 char *src = s.cstr();                     
  30.                 int i = 0;
  31.                 content = new char [length+1];   
  32.                 while (0 != *src)                          
  33.                 {
  34.                         *(content + i) = *src;     
  35.                         src++;i++;             
  36.                 }
  37.                 *(content + i) = 0;                                    
  38.         }
  39. }
  40. String::String(char * str)                                                                    
  41. {
  42.         int i;
  43.         length = MyStrLen(str);
  44.         if(length > 0)
  45.                 content = new char [length+1];
  46.         for(i = 0; i < length; i ++)
  47.         {
  48.                 *(content+i) = *(str+i);
  49.         }
  50.         *(content + i) = 0;
  51.        
  52. }
  53. int String::strlen()                                                
  54. {
  55.         return length;
  56. }
  57. char * String::cstr()                                             
  58. {
  59.         return content;
  60. }
  61. String ::~String()                                  
  62. {
  63.         if (NULL != content)
  64.                 delete [] content;
  65. }
  66. int MyStrLen(char * cstr)                                    
  67. {
  68.         int len = 0;
  69.         while ((NULL != cstr)&&('\0' != *cstr)&&(cstr++))
  70.                 len ++;
  71.         return len;
  72. }
  73. void main()
  74. {
  75.         String str("This is string 1\n");         
  76.         String str2 = str;                          
  77.         String str3(str2);                           
  78.         String str4 = "This is string 4\n";   
  79.         str4 = "can change?";
  80.         str3 = str4;
  81.         char* pch = str3.cstr;
  82.         int len = str.strlen();
  83.         cout<< pch<< endl;
  84.         cout<< "length is :"<< len<<endl;
  85. }

复制代码问题是主函数中       
String str("This is string 1\n");         //这调用哪个成员函数 什么意思 参数为字符串 实际传的是指向字符串第一个字符的指针吗
String str2 = str;                           //用的是拷贝构造函数吧
String str3(str2);                           //这和上句实际一样吗  
String str4 = "This is string 4\n";    //这又和第一句有什么关系 求详解头很晕~

再请问下大侠们 为什么这程序存在指针悬挂的问题,为什么说输出不方便,总是要调用接口obj.cstr(),或者obj(),

倾城°AllureLove 2022-10-22 08:05:22

不好意思 格式不易观看 对不起大家我重新来一遍问题是主函数中       
String str("This is string 1\n"       ...
lrlf123 发表于 2011-05-03 14:29

    代码长度请不要超过脸的长度

痕至 2022-10-22 08:05:22

回复 6# hniu

    麻烦你说清楚我哪里脸长了?我第一次发帖不太了解 格式不对 我就重新发 你什么意思啊

月下凄凉 2022-10-22 08:05:22

回复  hniu

    麻烦你说清楚我哪里脸长了?我第一次发帖不太了解 格式不对 我就重新发 你什么意思啊
lrlf123 发表于 2011-05-04 15:26

    你误会了,一般调试模块代码的长度不宜过长,一般是一个屏幕的长度,也就是一个人脸的长度。

   如果一段代码要好几个屏幕,调试起来是多么麻烦。而且也不符合阅读习惯。

   你可以把有问题的一小段代码挑出来,要精简,这样大家才有时间看。

不顾 2022-10-22 08:05:22

回复 8# hniu

    额。。。额。。。对不起 对不起 对不起 您真专业 我很菜的 不懂专业术语 ~~谢谢 你的指导以后我一定注意

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文