c++类的创建过程中,如果你只是创建一个空类,系统会自动添加默认构造函数,以及一个默认复制构造函数。在主函数中:
复制构造函数只能用于对象的初始化,初始化的发生有以下三种情况:
①当一个对象的副本被作为参数传递给函数时,
②当用同一个类的对象给另一个新对象赋值时时,
③对象作为函数的返回值
my_string s1(),s3(5);//调用构造函数
s3=s1;//调用复制用算符(’=‘已重载)
my_string s2(s1); //①当一个对象的副本被作为参数传递给函数时,
my_string s2=s1; //②当用同一个类的对象给另一个新对象赋值时时,
my_string f() // ③对象作为函数的返回值
{
my_string s5;
.
.
.
return s5;
}
#include <iostream>
#include <cstring>
using namespace std;
class my_string {
char *s;
public:
my_string(char *str)
{
s = new char[strlen(str)+1];
strcpy(s, str);
}
my_string(const my_string &obj) //复制构造函数
{
s = new char[strlen(obj.s)+1];
strcpy(s,obj.s);
}
~my_string() {
if(s) delete [] s;
cout << "Freeing s\n";
}
void show() { cout << s << "\n"; }
};
int main()
{
char str[80];
cin>>str;
my_string obj(str);
my_string ob1(obj);
my_string ob2=ob1;
ob1.show();
ob2.show();