这是一个简单的操作符重载我学到的程序,我无法理解为什么参数化构造函数正在使用' * st'而不仅仅是' st'或者'& st'。
现在,我知道传递引用,地址和值之间的区别。 在给定的示例中,我传递了一个字符串。如果它是通过引用传递的,那么参数化构造函数中的参数将是'& st'。我不确定它是否按地址传递字符串。
基本上,我不知道代码是如何在那里工作的。请解释一下,以及使用'& st'代替' * st'不工作。
class tyst
{
int l;
char *p;
public:
tyst(){l=0;p=0;}
tyst(char *st)
{
l=strlen(st);
p = new char[l];
strcpy(p,st);
}
void lay();
tyst operator + (tyst b);
};
void tyst::lay()
{
cout<<p<<endl;
}
tyst tyst::operator+(tyst b)
{
tyst temp;
temp.l=l+b.l;
temp.p = new char[temp.l];
strcpy(temp.p,p);
strcat(temp.p,b.p);
return temp;
}
int main()
{
tyst s1("Markus Pear");
tyst s2("son Notch");
tyst s3;
s3=s1+s2;
s3.lay();
return 0;
}
所以,如果有人能为我解决这个问题,我真的很感激。
答案 0 :(得分:1)
构造函数需要一个指向c-string(空终止字符数组)的指针。对其应用指针算法将允许访问整个字符串。注意new[]
返回指向第一个元素的指针; (单向)是如何使用指针的。
除了语法错误之外,通过引用传递单个字符是没有意义的。它对单个字符不感兴趣,它对数组的开头位置感兴趣。
这就像问某人他们的家庭住址是什么,他们会从草坪上给你一块石头。
答案 1 :(得分:1)
st
是一个C风格的字符串。通过值传递
tyst(char st)
你只会得到一个角色。
通过引用传递
tyst(char & st)
您也只会获得一个字符,但您可以修改它。在这种情况下不太有用。你也可以传入对指针的引用,但我也没有看到它的用处。
这是如何运作的
tyst(char * st)
说该函数将采用一个指针,该指针可能指向一个字符,第一个是未知数量的字符,绝对没有,或完全垃圾。最后两种可能性是为什么使用引用优先于指针,但是你不能使用引用。但是,您可以使用std::string
。在C ++中,这通常是首选方法。
在tyst
内部,假设指向未知但以空值终止的字符数,这几乎就是提供的内容。从技术上讲,你在这里用
tyst s1("Markus Pear");
是非法的。 "Markus Pear"
是一个字符串文字。它可能存储在不可写的内存中,因此它是const char *
,而不是char *
。