注意:
拷贝构造函数里面可以传递其他参数,但是参数必须有初始值,拷贝构造函数的参数是类对象的别名
#include <iostream>
using namespace std;
//class stu
//{
//private:
// int id;
// static int n;
//public:
// static void d()
// {
// cout<<"abc"<<"\n";
// }
// static void get()
// {
// cout<<"stu"<<"\n"<<"n="<<n<<"\n";
// d();
// }
// void add()
// {
// static int a=1;
// a++;
// cout<<"a="<<a<<"\n";
// }
//};
//int stu ::n;
class student
{
private:
int size;
string *name;
public:
student()
{
size = 1;
name = NULL;
}
student(int a,string *s)
{
size = a;
name = new string[a];
for(int i = 0;i < a;i ++)
{
name[i] = s[i];
}
}
void set(string &s,int i)
{
name[i]=s;
}
void get()
{
for(int i=0;i<size;i++)
{
cout<<name[i]<<"\n";
}
cout<<"size="<<size<<"\n";
}
//注意这里自己重新写一个拷贝构造函数,当改变原来类的一个对象里的数据成员的时候,本对象里的数据成员不被改变,如果不写此拷贝构造函数则系统自动调用拷贝构造函数,这时候本对象的成员数据会随着原来类的对象的数据的改变而改变……
student(student &d)拷贝构造函数
{
name=new string[d.size];
for(int i=0;i<d.size;i++) 这里是深拷贝。系统默认的是浅拷贝
{
name[i]=d.name[i];
}
size=d.size;
}
};
int main(int argc, const char * argv[])
{
// insert code here...
string s[3];
for(int i=0;i<3;i++)
{
cin>>s[i];
}
student m(3,s);
m.get();
student s3(m);
string n;
string &t=n;
cin>>n;
m.set(t, 1);
s3.get();
m.get();
// stu s;
// s.add();
//
//
// s.add();
std::cout << "Hello, World!\n";
return 0;
}
本文通过一个具体的C++学生类实例,深入探讨了深拷贝与浅拷贝的区别及其实现方式。文章展示了如何通过自定义拷贝构造函数来实现深拷贝,确保对象间的独立性。

被折叠的 条评论
为什么被折叠?



