4个回答
展开全部
拷贝构造函数就是实现深拷贝用的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
通过一个程序理解拷贝构造函数
#include"iostream"
using namespace std;
class Student
{ private:
static int number;
public:
Student()
{number++;
show("Student");
}
Student(const Student&)
{ number++;
show("Student");
}
~Student()
{ number--;
show("~Student");
}
static void show(const char *str)
{ if(str)
cout<<str<<":";
cout<<"number="<<number<<endl;
}
};
int Student::number=0;
Student f(Student x)
{ x.show("x inside f()");
return x;
}
int main()
{ Student h1;
Student h2=f(h1);
Student::show("after call f()");
return 0;
}
运行结果
Student:number=1
Student:number=2
x inside f():number=2
Student:number=3
~Student:number=2
after call f():number=2
~Student:number=1
~Student:number=0
Press any key to continue
结果分析:开始定义一个对象 Student h1 调用构造函数使得 number++,使number=1,在调用函数f(h1)使得形参得到实参在函数体内又生成一个对象使得number=2,接掘知着调用x.show()输出x inside f():number=2;当返回 一个对象调用拷贝构造函数初族散掘兆核始化h2,使得 number=3,接着对返回对象进行析构,得到~Student:number=2,在运行Student::show("after call f()"),结束时析构两个对象 h1,h2,使得 number=1,0;注意:如果不定义拷贝构造函数系统会有默认的拷贝构造函数
#include"iostream"
using namespace std;
class Student
{ private:
static int number;
public:
Student()
{number++;
show("Student");
}
Student(const Student&)
{ number++;
show("Student");
}
~Student()
{ number--;
show("~Student");
}
static void show(const char *str)
{ if(str)
cout<<str<<":";
cout<<"number="<<number<<endl;
}
};
int Student::number=0;
Student f(Student x)
{ x.show("x inside f()");
return x;
}
int main()
{ Student h1;
Student h2=f(h1);
Student::show("after call f()");
return 0;
}
运行结果
Student:number=1
Student:number=2
x inside f():number=2
Student:number=3
~Student:number=2
after call f():number=2
~Student:number=1
~Student:number=0
Press any key to continue
结果分析:开始定义一个对象 Student h1 调用构造函数使得 number++,使number=1,在调用函数f(h1)使得形参得到实参在函数体内又生成一个对象使得number=2,接掘知着调用x.show()输出x inside f():number=2;当返回 一个对象调用拷贝构造函数初族散掘兆核始化h2,使得 number=3,接着对返回对象进行析构,得到~Student:number=2,在运行Student::show("after call f()"),结束时析构两个对象 h1,h2,使得 number=1,0;注意:如果不定义拷贝构造函数系统会有默认的拷贝构造函数
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2015-07-08
展开全部
拷贝构造函数:拷贝又称复制,因此拷贝构氏枝禅造函数又称复制构造函数,就是实现深拷贝搭渗用的。
拷贝构造函数,是一种特殊的构造函数,它由编译器调用来完成一些基于同一类的其他对象的构建及初歼尘始化。
其唯一的参数(对象的引用)是不可变的(const类型),此函数经常用在函数调用时用户定义类型的值传递及返回。
拷贝构造函数的形式代码如下:
Class X
{
public:
X();
X(const X&);//拷贝构造函数
}
拷贝构造函数,是一种特殊的构造函数,它由编译器调用来完成一些基于同一类的其他对象的构建及初歼尘始化。
其唯一的参数(对象的引用)是不可变的(const类型),此函数经常用在函数调用时用户定义类型的值传递及返回。
拷贝构造函数的形式代码如下:
Class X
{
public:
X();
X(const X&);//拷贝构造函数
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询