所有答案都是正确的,但我想知道这些答案是否能帮助像我这样通过示例学习的初学者。所以,这里有一个例子。
以此代码为例:
#include<iostream>
#include<cstring>
using namespace std;
class String
{
private:
char *s;
int size;
public:
String(const char *str)
{
size=strlen(str);
s=new char[size+1];
strcpy(s,str);
}
~String()
{
delete[] s;
}
String(const String& old_str)
{
size=old_str.size;
s=new char[size+1];
strcpy(s,old_str.s);
}
void print()
{
cout<<s<<endl;
}
void change(const char *str)
{
delete [] s;
size=strlen(str);
s=new char[size+1];
strcpy(s,str);
}
};
int main()
{
String str1("Hello World");
String str2=str1;
str1.print();
str2.print();
str2.change("Namaste");
str1.print();
str2.print();
return 0;
}
这是复制构造函数:
String(const String& old_str)
{
size=old_str.size;
s=new char[size+1];
strcpy(s,old_str.s);
}
想象一下我们不通过引用传递。即:
String(const String old_str)
{
size=old_str.size;
s=new char[size+1];
strcpy(s,old_str.s);
}
看看 int main() 函数。
String str2=str1
再次查看复制构造函数(无引用)。
String(const String old_str)
这意味着:
String old_str=str1
它基本上和 main() 函数中写的内容相同。因此,它再次调用复制构造函数。在 C++ 中调用复制构造函数的规则是当您遇到以下情况时:
ABC a;
ABC b=a;
我希望这会有所帮助。