注册 登录
编程论坛 C++教室

程序理解问题,问题在注释(原文没注释)

ac6300776 发布于 2010-05-12 13:01, 771 次点击
#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



基础是差了点,还请多多指导
7 回复
#2
cnfarer2010-05-12 20:51
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中
#3
shiyuehai2010-05-12 21:31
但是在输出结果的时候,发现还是a1d11,都没改变,是怎么回事呢?
因为下面strcpy(text,str)将STR的内容拷贝到Text中 ,所以结果还是a1d11
#4
yc25757572010-05-12 21:34
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有所帮助~~另外版主的讲解也很好~~
#5
ac63007762010-05-13 08:37
回复 2楼 cnfarer
cout<<"enter 'String::String',str=>"<<str<<endl;   //这是COUT的事情
//这是COUT的事情
这句话不明白啊,如果 直接是打印*str的话,我还能理解成*str相当于字符串的名字,那理解上还容易点。而str根本就是一个地址,里面存放的是字符串的地址的吧
这里打印str和*str有什么区别呢
#6
ac63007762010-05-13 08:39
回复 4楼 yc2575757
这个确实是定义了一个类,然后类自动去调用构造函数,因为它的构造函数为String::String(char*str),所以需要传入参数~~
这里是定义了一个类的对象。我也是只能理解为:因为构造函数有参数,而只有一个,所以创建对象的时候就要带参数
#7
南国利剑2010-05-13 10:57
版主出手。我只有顶的份了
顶2楼
#8
cnfarer2010-05-18 16:33
回复 5楼 ac6300776
不妨将str理解为对象(这是面向对象的本质)。
1