重点知识
调用拷贝构造函数的3种情况
普通的构造函数是在对象创建时被调用,而拷贝构造函数在一下三种情况都会被调用:
(1) 当用类的一个对象去初始化该类的另一个对象时,如:
Rectangle p2(p1);//用对象p1初始化对象p2,拷贝构造函数被调用(代入法);
Rectangle p3=p1;//用对象p1初始化对象p3,拷贝构造函数被调用(赋值法)
(2) 当函数的形参是类的对象,调用函数进行形参和实参结合时。例如:
fun1(Rectangle p)//形参是类Rectangle的对象
{
p.disp();
}
int main()
{
Rectangle p1(10,20);
fun1(p1);//调用函数fun1时,实参p1是类Rectangle的对象
//将调用拷贝构造函数,初始化形参对象p;
return 0;
}
在main()函数中,执行语句“fun(p1)”;便是这种情况。在调用这种函数时,对象p1是实参,用它来初始化被调用函数的形参p时,需要调用拷贝构造函数。
(3) 当函数的返回值是对象,函数执行完成返回调用者时。例如:
Rectangle fun(2)
{
Rectangle p1(10,30);
return p1; //函数的返回值是对象;
}
int main()
{
Rectangle p2;
p2=fun(); //函数执行完成,返回调用者时,调用拷贝构造函数
return 0;
}
在函数fun2()内,执行语句“return p1;”时将会调用拷贝构造函数将p1的值复制到一个无名对象中,这个无名对象是编译系统在主程序中临时创建的,函数运行结束时对象p1消失,但临时对象会存在于语句“p2=fun()”中,执行完这个语句后,临时无名对象的使命也就完成了,该临时对象便自动消失了。
建立cylinder,类cylinder的构造函数被传递了两个double值,分别表示圆柱体的半径和高度。用类cylinder计算圆柱体的体积,并储存在一个double变量中。在类cylinder中包含一个成员函数vol();用来显示每个cylinder对象的体积。
#include <iostream>
#include <cmath>
using namespace std;
const double Pi = 3.14;
class cylinder
{
public:
cylinder(double R,double H):r(R),h(H)
{
}
void vol()
{
v=Pi*r*r*h;
cout<<"体积是:"<<v<<endl;
}
private:
double r,h,v;
};
int main()
{
double x,y;
while(1)
{
cin>>x>>y;
cylinder test(x,y);
test.vol();
}
return 0;
}