免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1867 | 回复: 8
打印 上一主题 下一主题

[C++] 能给我解释清楚吗?大侠们 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-05-02 20:10 |只看该作者 |倒序浏览
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(),

论坛徽章:
5
技术图书徽章
日期:2013-11-07 13:21:58技术图书徽章
日期:2013-12-07 10:34:46技术图书徽章
日期:2014-04-23 08:50:31双鱼座
日期:2014-09-16 09:12:34亥猪
日期:2015-01-23 13:37:49
2 [报告]
发表于 2011-05-02 23:07 |只看该作者
请用code贴代码

论坛徽章:
0
3 [报告]
发表于 2011-05-03 09:53 |只看该作者
不是解释不清,是懒得解释,这看得太累了。。。

论坛徽章:
0
4 [报告]
发表于 2011-05-03 10:07 |只看该作者
无格式,别编程

论坛徽章:
0
5 [报告]
发表于 2011-05-03 14:29 |只看该作者
不好意思 格式不易观看 对不起大家我重新来一遍

  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(),

论坛徽章:
0
6 [报告]
发表于 2011-05-03 22:09 |只看该作者
不好意思 格式不易观看 对不起大家我重新来一遍问题是主函数中       
String str("This is string 1\n"       ...
lrlf123 发表于 2011-05-03 14:29



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

论坛徽章:
0
7 [报告]
发表于 2011-05-04 15:26 |只看该作者
回复 6# hniu


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

论坛徽章:
0
8 [报告]
发表于 2011-05-04 16:38 |只看该作者
回复  hniu


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



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


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


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

论坛徽章:
0
9 [报告]
发表于 2011-05-04 17:08 |只看该作者
回复 8# hniu


    额。。。额。。。对不起 对不起 对不起 您真专业 我很菜的 不懂专业术语 ~~谢谢 你的指导以后我一定注意
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP