社区
C语言
帖子详情
关于拷贝构造函数
wshcdr
2003-02-23 01:18:57
哪位高人可以给我讲一下拷贝构造函数的作用,
如何调用,并给出一个小例子.
...全文
50
11
打赏
收藏
关于拷贝构造函数
哪位高人可以给我讲一下拷贝构造函数的作用, 如何调用,并给出一个小例子.
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zhjhe
2003-02-24
打赏
举报
回复
对,如果您的类需要自定义一个拷贝构造函数函数,那么它也需要自定义一个operator =.
看来您对这个问题还不是理解得很透彻,您也许要在多看看书,在实践中去体会它。
再重复一遍:知道什么时候要写拷贝构造函数同知道如何去写一样重要!
当不需要自定义拷贝构造函数函数时,不要画蛇添足。
关于如何写好拷贝构造函数函数和operator =,可以参看《effective C++》一书。
wshcdr
2003-02-24
打赏
举报
回复
我发现
一般自己写了拷贝构造函数的时候
也会重载operator=
有什么必然联系么?
zhaohangcom
2003-02-24
打赏
举报
回复
acange(acan) 说得对。
在这里我发表一下我个人的理解。
拷贝构造函数== operator=重载(功能上)
arock
2003-02-24
打赏
举报
回复
哦,原来是这样的!
zhjhe
2003-02-24
打赏
举报
回复
知道什么时候要写拷贝构造函数同知道如何去写一样重要!
nothing707
2003-02-24
打赏
举报
回复
道理都讲得差不多了,我就来举个例子吧:
( 本例子由模板实现,支持多种数据类型 )
#include <iostream>
using namespace std;
template < typename T >
class A
{
public:
A( T x = 0, T y = 0 );
A( A &p );
T Putoutx();
T Putouty();
private:
T a, b;
};
template < typename T >
A< T >::A( T x = 0, T y = 0 )
{
a = x;
b = y;
}
template < typename T >
A< T >::A( A< T > &p )
{
a = p.a;
b = p.b;
}
template < typename T >
T A< T >::Putoutx()
{
return a;
}
template < typename T >
T A< T >::Putouty()
{
return b;
}
主函数如下:
#include "test.h"
int main()
{
double x;
cin >> x;
float y;
cin >> y;
A< double > s( x, y );
A< double > t( s );
cout << "The function used by object s: " << endl;
cout << s.Putoutx() << endl;
cout << s.Putouty() << endl;
cout << "The function used by object t: " << endl;
cout << t.Putoutx() << endl;
cout << t.Putouty() << endl;
}
代码极为美观,走过路过的都过来看看:)。
这个例子很好地对拷贝构造函数的用法进行了说明。
tiger_qi
2003-02-24
打赏
举报
回复
其实应该这样的Circle(const Circle& c)
acange(acan)的没有使用引用参数,效率会慢
而楼上的使用了引用,但是没有加上consr修饰。不能保证参数在函数内被修改,你的加上const就更好了
macadam
2003-02-24
打赏
举报
回复
我不知道acange(acan)所例举的关于拷贝构造函数的例子是否正确??
acange(acan):"这个例子里面,Circle(const Circle c)就是拷贝构造函数:)"
是否应为Circle( Circle &c)???
acange
2003-02-24
打赏
举报
回复
就是当你想用
MyClass a=b; 时,或者当你想用a(b);时(a,b都是某个你自己写的类的实例)
就最好写一个叫做拷贝构造函数的东西。它会按照你的要求完成相应的赋值工作。之所以说最好,是因为编译器会提供一个默认的拷贝构造函数,完成上面的功能。可是当类里面有动态内存分配时候,会出现问题,所以最好自己写一个,而且这样也能使你的程序更清晰
class Circle
{
public:
Circle(double r=1.,double x=0,double y=0):_r(r),_x(x),_y(y){}
Circle(const Circle c);
private:
double _r,_x,_y;
}
Circle::Circle(const Circle c)
{
_r=c._r;
_x=c._x;
-y=c._y;
}
这个例子里面,Circle(const Circle c)就是拷贝构造函数:)
garbriel
2003-02-24
打赏
举报
回复
Let me see ...
jp311
2003-02-23
打赏
举报
回复
class A
{
public:
A(const &A a);
...
};
void f(A a);
int main()
{
A a;
f(a); //这时就会调用A::A(const &A);
}
300道C++题目
300道C++题目
关于
拷贝构造函数
,赋值运算符
关于
拷贝构造函数
和赋值运算符作者:wuhran2006-12-16
拷贝构造函数
当我们通过复制一个对象来初始化一个对象的时候,
拷贝构造函数
都被执行。 对于类中普通的成员变量,如,int, double, char, c++提供默认的
拷贝构造函数
,我们可以不用写
拷贝构造函数
就可以了。 如果类中成员有如,CArray,*指针(深拷贝,浅拷贝问题),那么我们就需要写自己的
拷贝构造函数
。同时注意深拷贝
关于
拷贝构造函数
调用情况的理解
关于
拷贝构造函数
调用情况的理解 C++中
拷贝构造函数
调用时机通常有三种情况 使用该类的一个已经创建完毕的对象来初始化该类的一个新对象 值传递的方式给函数参数传值(即函数的形参是类的对象) 以值方式返回局部对象(即函数的返回值是类的对象) 具体的理解如下:用代码说明 情况一: #include<iostream> using namespace std; class Person { public: Person() { cout << "调用无参构造函数" <&
c++的默认
拷贝构造函数
,从深度拷贝和浅拷贝说起
1. c++类的默认
拷贝构造函数
的弊端c++类的中有两个特殊的构造函数,(1)无参构造函数,(2)
拷贝构造函数
。它们的特殊之处在于: (1)当类中没有定义任何构造函数时,编译器会默认提供一个无参构造函数且其函数体为空; (2)当类中没有定义
拷贝构造函数
时,编译器会默认提供一个
拷贝构造函数
,进行成员变量之间的拷贝。(这个拷贝操作是浅拷贝)这里只讲
拷贝构造函数
。在c语言中,int a = 5; /
C语言
70,035
社区成员
243,244
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章