能给我解释清楚吗?大侠们
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技术交流群](/public/img/jiaqun_03.jpg)
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
请用code贴代码
不是解释不清,是懒得解释,这看得太累了。。。
无格式,别编程
不好意思 格式不易观看 对不起大家我重新来一遍
复制代码问题是主函数中
String str("This is string 1\n"); //这调用哪个成员函数 什么意思 参数为字符串 实际传的是指向字符串第一个字符的指针吗
String str2 = str; //用的是拷贝构造函数吧
String str3(str2); //这和上句实际一样吗
String str4 = "This is string 4\n"; //这又和第一句有什么关系 求详解头很晕~
再请问下大侠们 为什么这程序存在指针悬挂的问题,为什么说输出不方便,总是要调用接口obj.cstr(),或者obj(),
代码长度请不要超过脸的长度
回复 6# hniu
麻烦你说清楚我哪里脸长了?我第一次发帖不太了解 格式不对 我就重新发 你什么意思啊
你误会了,一般调试模块代码的长度不宜过长,一般是一个屏幕的长度,也就是一个人脸的长度。
如果一段代码要好几个屏幕,调试起来是多么麻烦。而且也不符合阅读习惯。
你可以把有问题的一小段代码挑出来,要精简,这样大家才有时间看。
回复 8# hniu
额。。。额。。。对不起 对不起 对不起 您真专业 我很菜的 不懂专业术语 ~~谢谢 你的指导以后我一定注意