C++面向对象高级开发(上)学习笔记
第三节:
问题1:C++中对构造函数使用初始列和函数体中赋值结果是一样的,但是为什么使用初始列的形式更好
解答:最重要的还是1和2,效率更高避免调用默认构造函数,针对某些常量成员变量和引用类型只能在初始列中进行初始化,不能再构造函数体内赋值,因为本身就是常量。
第五节:
问题1:inline complex operator - 请问这里的inline的作用是不是将操作符重载这个函数内联到complex这个类里面作为成员函数
回答:误解了inline的作用,实际上跟宏差不多;
问题2:操作符重载
回答:如果是成员函数,这个this有点像python中类里面的self;当然这里对于参数的输入this还是隐藏的不过可以直接用this;
问题3:为什么不用void作为返回值?
回答:实际上只考虑单次使用函数当然可以,但是如果要连续使用那么返回引用更加合适,不会出错;
问题4:为什么不能返回引用
回答:首先是全局函数,不是成员函数因此没有this这个隐藏变量
之所以不能返回引用,就是函数里面返回的这个值是新创建出来的,也就是作用域是函数,一旦函数结束就死亡了,如果返回引用,那么引用到什么?会出现悬空引用的情况?不像+=这个函数,本身输入参数已经包含了一个,返回的参数不过是对输入参数的修改,因此即使函数结束也不会随之死亡,因此可以返回引用;
问题5:cout是不是需要返回const 已经返回类型
回答:考虑到多个 <<连用还是需要返回ostream&,引用类型,并且由于以前的<<不知道现在的复数,因此也需要对<<进行操作符重载以适合现在的数据类型;