★★★★★拷贝构造函数和赋值运算的区别?

surfl 2004-01-15 10:49:45
拷贝构造函数一般在什么时候发生?
能否给个样例?
谢谢!
...全文
47 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluebohe 2004-01-18
  • 打赏
  • 举报
回复
A a=……;这是调用拷贝构造函数

A a;
a=……;这是调用赋值运算
vollin 2004-01-18
  • 打赏
  • 举报
回复
1.拷贝构造,有3个地方调用
a.初始化时,有两种方式例如Class CA{}
CA a;//无参构造
CA b(a);//拷贝构造.第一种方式
CA c=a;//拷贝构造,第二种方式
b.参数传值,如楼上各位
c.函数返回值
例:
fun()
{
CA re;
return re;//在调用的函数栈里调用拷贝构造构造一个临时变量
}
a.=
仅当在非初始化时使用=号时发生,且可多次重载即=右侧可以和左侧不是同一种类型的变量.



laomai 2004-01-18
  • 打赏
  • 举报
回复
拷贝构造函数发生的例子:
A a(1); //调用构造函数,
A b(a); //调用拷贝构造函数
A c=a; //第一次赋值,因为对象还没初始化,还是调用拷贝构造函数,
c=b; //初始化的对象才能调用赋值函数

void f(A a); //函数声明
f(c); //实参传递时调用拷贝构造函数,但是编译器会根据具体情况把这个过程优化掉。
flyhigh 2004-01-15
  • 打赏
  • 举报
回复
up && mark
surfl 2004-01-15
  • 打赏
  • 举报
回复
改成"这里应该是调用自己定义的普通构造函数??对不????"
surfl 2004-01-15
  • 打赏
  • 举报
回复
在定义类变量时
EX:
class A
{ int a;
public :
A(int b=0) { b=a;}
};

void main()
{ A a0(5); //这里应该是调用增加定义的普通构造函数??对不????
A a1=a0; //这里是拷贝构造函数???对不????
........
}
victor_cui 2004-01-15
  • 打赏
  • 举报
回复
当然不同了
举个拷贝例子
void func(A a);//A是一个类,这个时候安值传递,就会发生对象拷贝
赋值简单 A a, b;
a = b;//这就是赋值
这两种情况都要注意深层copy的问题
dfyang 2004-01-15
  • 打赏
  • 举报
回复
在定义类变量时
EX:
class A
{ int a;
public :
A(int b=0) { b=a;}
};

void main()
{ A a0(5);
A a1=a0;
........
}
会思考的草 2004-01-15
  • 打赏
  • 举报
回复
所谓拷贝构造函数,其作用,就是用一个实例,去初始化另一个实例。
只要程序中出现,按值传递参数,就会调用拷贝构造函数。
会思考的草 2004-01-15
  • 打赏
  • 举报
回复
调用拷贝构造函数,就是传值的同意语。
蒋晟 2004-01-15
  • 打赏
  • 举报
回复
http://msdn.microsoft.com/library/en-us/vclang/html/_pluslang_copying_class_objects.asp
dfwid 2004-01-15
  • 打赏
  • 举报
回复
mark

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧