概述
关于以iostream 取代stdio.h?
原因:1,scanf和printf不具备type-safe性质。
2,不可扩充。
这2点正是C++的基石之一。50年代的东西,是不是该被取代了呢?
但是,某些iostream的实现效率比不上对应的C Stream函数;标准化时iostream库在某些基本的地方做了修改,因此在大型应用程序的移植时,可能会发现不同的iostream版本支持不同的或近似的标准;iostream程序库中的classes有constructors,而stdio.h没有。
关于iostream.h 与iostream
#include<iostream> 取得的是隐藏于namespace std 内的iostream程序库元素。而iostream.h取得的是Global Scope中的元素,可能造成的后果是名字冲突,相反名字空间正式为了阻止此类事情发生而设计的。
关于operator<<,operator>>不是成员函数:为了支持混合操作(能和内建类型一起使用)。
合法,但不合乎习惯
左侧必须是类对象。
如果是成员函数:
const Rational operator*(const Rational& rhs)const;
result = onHalf *2;
result = 2 * onHalf; //wrong
对应的函数形式: result = onHalf.operator*(2); //right
result =2.perator*(onHalf);//wrong
That is because 只有参数能产生 implicit type conversion(隐式类型转换),但是member function所依附的对象(*this)并不能执行这种转换。under the condition that Non-explicit constructors)
example :
explicit Rational(int numerator = 0, int denominator = 1);
result = onHalf * 2; //wrong
如果是非成员函数则混合运算没有问题
const Rational opertor*(const Rational& lhs,const Ratioal&rhs)
addition: can operator* be a friend function of rational class?
NO,operator * 完全可由Rational 的公开接口完成,只要能避免使用friend函数,就应该尽量避免。
关于如何在member function,non-member function,friend funciton的抉择
1,虚拟函数必须是member function
2, operator>>,operator<< 作为non-member function, if the function need to use the non-public members,consider it to be a friend!
3,only non-member functions can implement implicit type convertion on the left argument,so if 左边的参数需要实施隐式类别转换,让它成为非成员函数,如果需要去用非成员函数,让它成为Friend!
关于以new,delete取代malloc and free
simple:The latter knows nothing about constructors and destructors.
new completes the location of storage and initionlization of object
delete : destruct the object and free the storage
最后
以上就是从容悟空为你收集整理的2009.9.8笔记的全部内容,希望文章能够帮你解决2009.9.8笔记所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复