我是c ++编程的新手,和其他人一样,我发现复制构造函数的概念有点stange.我经历了一个网站说
复制构造函数是一种特殊的构造函数,它创建一个新对象,它是现有对象的副本,并且有效地执行.
我写了一个代码来创建一个对象,它是另一个对象的副本,发现结果很奇怪,代码如下所示.
#include <iostream>
using namespace std;
class box
{
public:
double getwidth();
box(double );
~box();
box(box &);
private:
double width;
};
box::box(double w)
{
cout<<"\n I'm inside the constructor ";
width=w;
}
box::box(box & a)
{
cout<<"\n Copy constructructor got activated ";
}
box::~box()
{
cout<<"\n I'm inside the desstructor ";
}
double box::getwidth()
{
return width;
}
int main()
{
box box1(10);
box box2(box1);
cout<<"\n calling getwidth from first object : " <<box1.getwidth();
cout<<"\n calling the getwidth from second object : " <<box2.getwidth();
}
Run Code Online (Sandbox Code Playgroud)
当我根据下面的代码调用box2.getwidth()时,我得到了一个垃圾值.根据我的理解,我期望将宽度初始化为10,因为box2是box1的副本.请澄清
您的期望是所有成员都是自动复制的,但它们不是(如果您提供自己的实现).您需要自己添加逻辑:
box::box(const box & a)
{
width = a.width;
cout<<"\n Copy constructructor got activated ";
}
Run Code Online (Sandbox Code Playgroud)
你的版本告诉编译器 - "当你制作副本时,打印出那个东西",它就是这样做的.你永远不会指示它复制任何成员.
仅供参考,如果您不提供任何实现,编译器将为您生成一个复制构造函数,它执行浅的成员复制.
| 归档时间: |
|
| 查看次数: |
86 次 |
| 最近记录: |