// 特殊的构造函数,使用同一类之前创建的对象来初始化新创建的对象
// 通常用另外一个同类型对象来初始化新的对象
// 复制对象将将他作为参数传递给函数
// 复制对象,并且从函数返回这个新对象+
// 传入函数时,作为被复制对象,会调用复制构造函数

#include <iostream>

using namespace std;
class Line{
public:
int getLength(void){

return *this->ptr;
}
// 一般构造函数
Line(int length){
cout<<"start"<<endl;
ptr = new int;
*ptr = length;
}

// 复制构造函数
Line(const Line &object){
cout<<"调用了复制构造构造函数!"<<endl;
ptr = new int;
*ptr = *object.ptr;

}
// 析构函数
~Line(){
cout<<"结束对象"<<endl;
delete ptr;
}


private:
int *ptr;
};

void display(Line obj){
cout<<"线段长度为"<<obj.getLength()<<endl;
}
int main(){
Line line(10);
cout<<"--------------"<<endl;
display(line);
return 0;
}
  • 使用其同类型类来初始化
#include <iostream>

using namespace std;

// 特殊的构造函数,使用同一类之前创建的对象来初始化新创建的对象
// 通常用另外一个同类型对象来初始化新的对象
// 复制对象将将他作为参数传递给函数
// 复制对象,并且从函数返回这个新对象+
class Line{
public:
int getLength(void){

return *this->ptr;
}
// 一般构造函数
Line(int length){
cout<<"start"<<endl;
ptr = new int;
*ptr = length;
}

// 复制构造函数
Line(const Line &object){
cout<<"调用了复制构造构造函数!"<<endl;
ptr = new int;
*ptr = *object.ptr;

}
// 析构函数
~Line(){
cout<<"结束对象"<<endl;
delete ptr;
}


private:
int *ptr;
};

void display(Line obj){
cout<<"线段长度为"<<obj.getLength()<<endl;
}
int main(){
Line line(10);
cout<<"--------------"<<endl;
Line line2 = line;
cout<<line2.getLength()<<endl;
return 0;
}



```ls