拷贝构造函数
1.拷贝构造函数作用:
①:程序中需要新建立一个对象,并用另一个同类的对象对它初始化;
②:当函数的参数为类的对象时,需要建立一个实参的拷贝;
③:函数的返回值是类的对象;
2 格式:
注意:关键字const是为了保护参数值,防止被改变
///在类外定义,加域符 :: Box::Box(const Box &b) { hei=b.hei; len=b.len; wid=b.wid; }
3. 使用情况即考虑到其作用时
① 建立一个新的对象
#include<iostream> using namespace std; class box{ private: int a,b,c; public: box(int x,int y,int z):a(x),b(y),c(z) { cout<<"构造函数"<<endl; } box(const box &q) { a=q.a; b=q.b; c=q.c; cout<<"拷贝构造函数"<<endl; } ~box() { cout<<"析构函数"<<endl; } int volum() { return a*b*c; } }; int main() { box A(4,5,6); box B(A); cout<<A.volum()<<endl; cout<<B.volum()<<endl; }
② 当函数的参数为类的对象时,需要建立一个实参的拷贝;
#include<iostream> using namespace std; class box{ private: int a,b,c; public: box(int x,int y,int z):a(x),b(y),c(z) { cout<<"构造函数"<<endl; } box(const box &q) { a=q.a; b=q.b; c=q.c; cout<<"拷贝构造函数"<<endl; } ~box() { cout<<"析构函数"<<endl; } int volum() { return a*b*c; } }; void fun(box M)///形参是类的对象 { cout<<M.volum()<<endl; } int main() { box A(4,5,6); fun(A);///将A传入 cout<<A.volum()<<" A "<<endl; }
③ 函数的返回值是类的对象
#include<iostream> using namespace std; class box{ private: int a,b,c; public: box(int x,int y,int z):a(x),b(y),c(z) { cout<<"构造函数"<<endl; } box(const box &q) { a=q.a; b=q.b; c=q.c; cout<<"拷贝构造函数"<<endl; } ~box() { cout<<"析构函数"<<endl; } int volum() { return a*b*c; } }; box WW() { box B(1,2,3); return B; } int main() { box A(0,0,0); A=WW(); cout<<A.volum()<<endl; } ///box B是在WW()函数定义的,在调用WW()结束后,B的生命周期结束, ///在函数WW()结束前的return语句调用了拷贝构造函数,赋值给A。
时间: 2024-10-12 07:55:32