| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 771 人关注过本帖, 1 人收藏
标题:程序理解问题,问题在注释(原文没注释)
只看楼主 加入收藏
ac6300776
Rank: 1
等 级:新手上路
帖 子:9
专家分:2
注 册:2010-4-5
结帖率:33.33%
收藏(1)
已结贴  问题点数:10 回复次数:7 
程序理解问题,问题在注释(原文没注释)
#include<iostream.h>
#include<string.h>
class Sring{
char*text;           //创建一个指向字符的指针,这个指针还没赋值,也就是指向未明,这样理解对吗?
public:
String(char*str)     //在这里,我认为是带有参数的构造函数,参数是一个指针,不知道这样理解对不对
~String();
void printStr(){cout<<text<<endl;}
};
String::String(char*str){      //建立一个带有参数的构造函数,参数是一个指向字符的指针,这样理解对吗?
cout<<"enter 'String::String',str=>"<<str<<endl;   //这里不明白了,str只是一个地址,怎么会把一个地址打印出来呢,而结果却是a1d11,不明白
text=new char[strlen(str)+1];                      /*[strlen(str)+1]这里我同学说是把str字符长度加1,不知道对不对,整行的意思是把长度加1之后的字符串赋给text,是这样理解的吗
                                                     但是在输出结果的时候,发现还是a1d11,都没改变,是怎么回事呢?
                                                   */
strcpy(text,str);                  //这个实现一个什么功能
}
String::~String(){
cout<<"enter 'String::~String',text=>"<<text<<endl;
delete[]text;
}
void main(){
String str1("a1d11");   //这里不懂,建立一个对象,而这样对象却带有参数,这个应该怎么理解,这个参数按照运行结果似乎是传递给了构造函数,不明白
String str2("s22g22");
str1.printStr();
str2.printStr();
cout<<"ending main!"<<endl;
}
程序运行后的结果如下:
"enter 'String::String',str=>a1d11
"enter 'String::String',str=>s22g22
a1d11
s22g22
ending main!
enter 'String::~String',text=>s22g22
enter 'String::~String',text=>a1d11



基础是差了点,还请多多指导
搜索更多相关主题的帖子: 注释 原文 
2010-05-12 13:01
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:2 
char*text;           //创建一个指向字符的指针,这个指针还没赋值,也就是指向未明,这样理解对吗?--》对
String(char*str)     //在这里,我认为是带有参数的构造函数,参数是一个指针,不知道这样理解对不对--》对
String::String(char*str){      //建立一个带有参数的构造函数,参数是一个指向字符的指针,这样理解对吗?--》构造函数的实现
cout<<"enter 'String::String',str=>"<<str<<endl;   //这是COUT的事情
text=new char[strlen(str)+1];                      /*这是新建一个字符串*/
strcpy(text,str);                  //这个实现一个什么功能--》将STR的内容拷贝到Text中

★★★★★为人民服务★★★★★
2010-05-12 20:51
shiyuehai
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:96
专家分:116
注 册:2009-9-4
收藏
得分:2 
但是在输出结果的时候,发现还是a1d11,都没改变,是怎么回事呢?
因为下面strcpy(text,str)将STR的内容拷贝到Text中 ,所以结果还是a1d11
2010-05-12 21:31
yc2575757
Rank: 7Rank: 7Rank: 7
来 自:北京
等 级:黑侠
威 望:1
帖 子:113
专家分:522
注 册:2010-5-7
收藏
得分:2 
char*text;           //创建一个指向字符的指针,这个指针还没赋值,也就是指向未明,这样理解对吗?
String(char*str)     //在这里,我认为是带有参数的构造函数,参数是一个指针,不知道这样理解对不对     
String::String(char*str){      //建立一个带有参数的构造函数,参数是一个指向字符的指针,这样理解对吗?   
cout<<"enter 'String::String',str=>"<<str<<endl;   //这里不明白了,str只是一个地址,怎么会把一个地址打印出来呢,而结果却是a1d11,不明白
这里不是打印地址,因为str是个char型的指针,指针指向的是"a1d11",所以输出a1d11。
text=new char[strlen(str)+1];                      /*[strlen(str)+1]这里我同学说是把str字符长度加1,不知道对不对,整行的意思是把长度加1之后的字符串赋给text,是这样理解的吗    new相当于为text开辟一个大小为str长度+1的空间。
strcpy(text,str);                  //这个实现一个什么功能     这个就是将str的内容拷贝到text中,这就是你上面的问题了, 但是在输出结果的时候,发现还是a1d11,都没改变,是怎么回事呢?因为str的内容是"a1d11",复制过去当然输出"a1d11"
String str1("a1d11");   //这里不懂,建立一个对象,而这样对象却带有参数,这个应该怎么理解,这个参数按照运行结果似乎是传递给了构造函数,不明白
这个确实是定义了一个类,然后类自动去调用构造函数,因为它的构造函数为String::String(char*str),所以需要传入参数~~
这个是我自己的拙见,希望能对lz有所帮助~~另外版主的讲解也很好~~
2010-05-12 21:34
ac6300776
Rank: 1
等 级:新手上路
帖 子:9
专家分:2
注 册:2010-4-5
收藏
得分:0 
回复 2楼 cnfarer
cout<<"enter 'String::String',str=>"<<str<<endl;   //这是COUT的事情
//这是COUT的事情
这句话不明白啊,如果 直接是打印*str的话,我还能理解成*str相当于字符串的名字,那理解上还容易点。而str根本就是一个地址,里面存放的是字符串的地址的吧
这里打印str和*str有什么区别呢
2010-05-13 08:37
ac6300776
Rank: 1
等 级:新手上路
帖 子:9
专家分:2
注 册:2010-4-5
收藏
得分:0 
回复 4楼 yc2575757
这个确实是定义了一个类,然后类自动去调用构造函数,因为它的构造函数为String::String(char*str),所以需要传入参数~~
这里是定义了一个类的对象。我也是只能理解为:因为构造函数有参数,而只有一个,所以创建对象的时候就要带参数
2010-05-13 08:39
南国利剑
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:29
帖 子:1165
专家分:3536
注 册:2010-4-12
收藏
得分:2 
版主出手。我只有顶的份了
顶2楼

南国利剑
2010-05-13 10:57
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:0 
回复 5楼 ac6300776
不妨将str理解为对象(这是面向对象的本质)。

★★★★★为人民服务★★★★★
2010-05-18 16:33
快速回复:程序理解问题,问题在注释(原文没注释)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.041576 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved