拷贝构造函数:将已存在的类对象的值赋值给类对象,进而达到复制已有对象中数据的目的:
#include <iostream>
#include <string>
using namespace std;
class My_Class
{
private:
int x, y;
//int *text;
public:
My_Class() { x = 0; y = 0; }
My_Class(int a) { x = a; y = 0; }
My_Class(int a, int b) { x = a; y = b; }
~My_Class() { cout << "析构函数调用ing" << endl; }
void clear() { x = 0; y = 0; }
My_Class(const My_Class &another);
int GetData();
void InitData();
void PrintData();
};
int My_Class::GetData()
{
return x;
}
void My_Class::InitData()
{
cin >> x >> y;
}
void My_Class::PrintData()
{
cout << "x = " << x << ",y = " << y << endl;
}
My_Class::My_Class(const My_Class &another)
{
x = another.x;
y = another.y;
}
int main()
{
int x;
My_Class data1 = 100;
data1.PrintData();
My_Class data2(10, 11);
data2.PrintData();
My_Class data3(100);
data3.PrintData();
My_Class data4 = data2;
data4.PrintData();
My_Class data5(data2);
data5.PrintData();
return 0;
}
深拷贝和浅拷贝:
浅拷贝:由于类中没有定义复制构造函数,因此当调用对象函数是,只是将指针值济宁了复制,也就是说两个指针指向同一个内存区域。这种复制叫做浅拷贝;
深拷贝:由于在类中定义了复制构造函数,同时在复制构造函数中s指针申请了新的内存空间,因此x对象中的s所指向的内容并不发生变化。这种复制叫深复制。
//#include <iostream>
//#include <string>
//using namespace std;
//class My_Class
//{
//private:
// int x, y;
// //int *text;
//public:
// My_Class() { x = 0; y = 0; }
// My_Class(int a) { x = a; y = 0; }
// My_Class(int a, int b) { x = a; y = b;
}
// ~My_Class() { cout << "析构函数调用ing" << endl; }
// void clear() { x = 0; y = 0; }
// My_Class(const My_Class &another);
// int GetData();
// void InitData();
// void PrintData();
//};
//int My_Class::GetData()
//{
// return x;
//}
//void My_Class::InitData()
//{
// cin >> x >> y;
//}
//void My_Class::PrintData()
//{
// cout << "x = " << x << ",y = " << y << endl;
//}
//My_Class::My_Class(const My_Class &another)
//{
// x = another.x;
// y = another.y;
//}
//int main()
//{
// int x;
// My_Class data1 = 100;
// data1.PrintData();
// My_Class data2(10, 11);
// data2.PrintData();
// My_Class data3(100);
// data3.PrintData();
// My_Class data4 = data2;
// data4.PrintData();
// My_Class data5(data2);
// data5.PrintData();
// return 0;
//}
#include <iostream>
#include <string>
using namespace std;
class Cstring
{
private:
char *s;
public:
Cstring(const char*);
Cstring(const Cstring &);
void print(void) { printf("%s\n", s); }
void strcon(char *p);
};
void Cstring::strcon(char *p)
{
strcat(s, p);
}
Cstring::Cstring(const char *x)
{
s = new char[strlen(x) + 1];
strcpy(s, x);
}
Cstring::Cstring(const Cstring &x)
{
s = new char[strlen(x.s) + 10];
strcpy(s, x.s);
}
int main()
{
Cstring x("Good");
Cstring y = x;
x.print();
y.print();
y.strcon("morning!");
x.print();
y.print();
return 0;
}