C++重载括号运算符与构造函数、拷贝构造函数、赋值函数使用上区别有吗

mirroatl187 2014-04-10 02:58:34
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
...全文
303 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Pump天天学习 2014-04-11
  • 打赏
  • 举报
回复
引用 12 楼 u013697891 的回复:
[quote=引用 5 楼 dbzhang800 的回复:] 假定A是一个类 A a1; //构造函数 A a2(a1); //拷贝构造 A a3; a3 = a1; //赋值 a3(); //重载括号运算符
a3 = a1; //赋值这个不是要用到复制(拷贝)构造函数吗,必须重载=才可以使用吗[/quote] 这个可不是拷贝构造
赵4老师 2014-04-11
  • 打赏
  • 举报
回复
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构…… 对学习编程者的忠告: 眼过千遍不如手过一遍! 书看千行不如手敲一行! 手敲千行不如单步一行! 单步源代码千行不如单步对应汇编一行! 单步类的实例“构造”或“复制”或“作为函数参数”或“作为函数返回值返回”或“参加各种运算”或“退出作用域”的语句对应的汇编代码几步后,就会来到该类的“构造函数”或“复制构造函数”或“运算符重载”或“析构函数”对应的C/C++源代码处。 VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。 对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。 (Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。) 运算符重载是语法糖。 语法糖越甜,编译调试查错越苦! 把有限的生命浪费在品尝/品鉴无穷多种的语法糖中,我认为不值当。
神-气 2014-04-11
  • 打赏
  • 举报
回复
引用 12 楼 u013697891 的回复:
[quote=引用 5 楼 dbzhang800 的回复:] 假定A是一个类 A a1; //构造函数 A a2(a1); //拷贝构造 A a3; a3 = a1; //赋值 a3(); //重载括号运算符
a3 = a1; //赋值这个不是要用到复制(拷贝)构造函数吗,必须重载=才可以使用吗[/quote] 构造函数都是没有返回值的,其它函数都是有返回值的。 A a=b; A a(b) 这样的都是构造函数,声明的同时初始化。 a = b; 没有在此处声明,有个等号是赋值。
没事人 2014-04-10
  • 打赏
  • 举报
回复
引用 5 楼 dbzhang800 的回复:
假定A是一个类 A a1; //构造函数 A a2(a1); //拷贝构造 A a3; a3 = a1; //赋值 a3(); //重载括号运算符
a3 = a1; //赋值这个不是要用到复制(拷贝)构造函数吗,必须重载=才可以使用吗
zmyouren1983 2014-04-10
  • 打赏
  • 举报
回复
A a A a1 = a;//-----> 需要调用拷贝构造函数
lm_whales 2014-04-10
  • 打赏
  • 举报
回复
重载括号运算符 operator []() 下标运算符---subscript operator operator()();函数调用运算符,重载他用来定义仿函数 用法 F f; f(); operater T()强制类型转换运算符,重载C++ 的C式类型转换运算符 T(); 用法A a; T x =T( a); C++四个强制类型转换运算,static_cast<T>(),dynamic_cast<T>(),const_cast<T>(),reinterept_cast<T>(); 是不可重载的. C++ ,C的 强制类型转换运算(T)也是不可重载的,只有 T() 可以重载。 构造函数、拷贝构造函数、赋值函数 拷贝构造函数 ,是构造函数的一种,一般是用本类的对象,初始化对象时需要重载他; 是一种特殊的单参数构造函数。 operator = 用于对象复制。 C++单参构造函数(包括多于一个参数,但是只有一个参数没有缺省值的构造函数)可以用作隐式类型转换 operater T() 也可以,不同的是,A 类的单参构造函数 ,用于把其他类型对象转换成A 类对象 A 类的operater T(),用于把A 类对象转换成T类型的对象。 A a; //需要缺省拷贝构造函数---包括多个参数,但是所有参数都有缺省值的构造函数 A a(10); //需要单参拷贝构造函数----包括多于一个参数,但是只有一个参数没有缺省值的,和所有参数都有缺省值的构造函数 A a(10,11); //需要双参拷贝构造函数----包括多个参数,但是只有前一个,两个参数没有缺省值,以及所有参数都有缺省值的构造函数。 A a1(a);//-----> 需要调用拷贝构造函数 A a2; a2 =a; 需要调用operator = 至于C++11 的移动构造函数,移动赋值函数,只有特殊场合使用,目的是转移数据。 从而使得返回对象的函数返回等场合,时空复杂度降低。
lm_whales 2014-04-10
  • 打赏
  • 举报
回复
中括号叫做下标运算符---subscript operator ;operator []();重载他的作用是,把类当做数组使用.
神-气 2014-04-10
  • 打赏
  • 举报
回复
引用 7 楼 ADF1230 的回复:
[quote=引用 5 楼 dbzhang800 的回复:] 假定A是一个类 A a1; //构造函数 A a2(a1); //拷贝构造 A a3; a3 = a1; //赋值 a3(); //重载括号运算符
++ ,说的很清楚了。 c++11里面再加了俩:
class CTest
{
public:
	//构造函数们!
	CTest();	//构造函数
	CTest(const CTest& other);	//拷贝构造函数
	CTest(CTest&& other);	//移动构造函数
	
	//赋值函数们!
	CTest& operator=(const CTest& other);	//赋值函数
	CTest&& operator=(CTest&& other);		//移动赋值函数
	
	//括号运算符们
	void operator()();	//小括号运算符
	void operator[]();	//中括号运算符
}
[/quote] CTest& operator=(CTest&& other); //移动赋值函数
神-气 2014-04-10
  • 打赏
  • 举报
回复
引用 5 楼 dbzhang800 的回复:
假定A是一个类 A a1; //构造函数 A a2(a1); //拷贝构造 A a3; a3 = a1; //赋值 a3(); //重载括号运算符
++ ,说的很清楚了。 c++11里面再加了俩:
class CTest
{
public:
	//构造函数们!
	CTest();	//构造函数
	CTest(const CTest& other);	//拷贝构造函数
	CTest(CTest&& other);	//移动构造函数
	
	//赋值函数们!
	CTest& operator=(const CTest& other);	//赋值函数
	CTest&& operator=(CTest&& other);		//移动赋值函数
	
	//括号运算符们
	void operator()();	//小括号运算符
	void operator[]();	//中括号运算符
}
lm_whales 2014-04-10
  • 打赏
  • 举报
回复
括号运算符,实际上有两个,一个叫强制类型转换运算符 operater T() 一个叫函数调用运算符operator ()()
dbzhang800 2014-04-10
  • 打赏
  • 举报
回复
假定A是一个类 A a1; //构造函数 A a2(a1); //拷贝构造 A a3; a3 = a1; //赋值 a3(); //重载括号运算符
zybjtu 2014-04-10
  • 打赏
  • 举报
回复
重载赋值操作符是用于 对已经有的对象进行修改。 构造函数是生成一个对象。本来是没有的。
mirroatl187 2014-04-10
  • 打赏
  • 举报
回复
说来听听
引用 2 楼 dbzhang800 的回复:
不是有没有的问题,而是区别太大了
dbzhang800 2014-04-10
  • 打赏
  • 举报
回复
不是有没有的问题,而是区别太大了
ztenv 版主 2014-04-10
  • 打赏
  • 举报
回复
怎么会没有区别呢?

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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