c++类中系统默认拷贝构造函数的解析

2014-11-24 11:21:38 · 作者: · 浏览: 0

我们在定义了一个c++类后, 如果我们自己没有写拷贝构造函数 , 那么系统就会系统一个默认的拷贝构造函数 , 但如果我们类中存在指针等地址变量时 , 就会发生意想不到的结构:

代码1、调用系统拷贝构造函数:

#include 
  
   
#include 
   
     using namespace std; class point { public: point() {} point(string *c) { z = c;} void set2(); string get(); private: string *z; }; string point::get() { return z[0]; } void point::set2() { z[0] = "xy"; } int main() { string xy[3] = {"wef" , "efe" , "wre"}; point a(xy); point b(a); a.set2(); cout << a.get() << endl; cout << b.get() << endl; return 0; } 
   
  
输出的结果是:

\


< http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+tPrC6zKhorX308PX1Lao0uW1xL+9sbS5udTsuq/K/aO6I2luY2x1ZGUgPGlvc3RyZWFtPjxicj4KPHByZSBjbGFzcz0="brush:java;">#include #include using namespace std; class point { public: point() {} point(const point &c , int new_size); point(string *c) {z = c;} void set2(); string get(); private: string *z; }; string point::get() { return z[0]; } void point::set2() { z[0] = "xy"; } point::point(const point &c , int new_size) { z = new string[new_size]; for(int i = 0; i < new_size; i++) z[i] = c.z[i]; } int main() { string xy[3] = {"wef" , "efe" , "wre"}; point a(xy); point b(a , 3); a.set2(); cout << a.get() << endl; cout << b.get() << endl; return 0; } 输出结果是: