C++ primer读书笔记
标题:重载函数再论
重载函数是C++提出来的概念,“1+3”和“+”,虽然都是加法,做的却不是同的操作:,没有“类”这么高深的概念.“结构体”也只是内存数据的组织方法,,在C语言时代编译器明明做了类似于重载的事情,却可以像雷锋一样“做好事不留名”.
C++发展出了类,并且赋予了“类”很高的期望,,就拿加法运算来说,编译器如何知道对某类对象的加法该调用哪一个详细的操作代码?于是,即使不出现普通函数的重载,至少运算符是要重载的.
林锐博士在《高质量C++/C编程指南》中为重载函数的必要性提了另一个理由:类的构造函数名称必须与类名相同,.
对于普通程序员来说,:不用记忆多个不同的函数名了,:并不是任何时候都有必要重载函数的,有的时候不同的函数名可以直观地带来好多信息,滥用重载只是牺牲了名称中的信息.
标题::重载函数的概念
引用:出现在相同作用域中的两个(可以是两个以上——偷猫注)函数,如果具有相同的名字而形参表不同,则称为重载函数.
本节开头第一句话就给出了重载函数的定义:重载函数必须符合两个条件:一是出现在相同的作用域中、二是函数名字相同而形参表不同.
其中第一个条件一般人往往是不去想的,其实函数名相同而作用域不同的函数大大存在,.
第二个条件还可以详说一下:函数名字相同当然不在话下,这是函数被称为“重载”,可能表现在形参个数不同、可能表现在形参类型不同、还可能表现在形参顺序不同.
如果要扩展开来说,还可以举出许多不是重载函数的情况.
一、如果既在同一作用域下、名称也相同、形参表也相同,则后者被视为前者的重复声明.——函数可以重复声明,因为函数的声明并不产生目标代码,但是函数的定义不允许重复出现.
二、如果既在同一作用域下、名称也相同、形参表也相同,但是返回值不同,,因为调用函数的时候只凭名称和形参来选择函数,,一是因为函数的返回值可以被丢弃;二来即使不丢弃,将返回值赋予另一个变量之前没必要检查我需要什么样的返回值,而能否赋值也与函数本身无关.
三、有些时候看起来形参表不同,实际上是完全相同的,书本第229页讲了四组这样的例子:
Record lookup(const Account &acct);
Record lookup(const Account &);//区别在于有没有给形参命名
typedef Phone Telno;
Record lookup(const Phone&);
Record lookup(const Telno&);//只是给类型取了个别名
Record lookup(const Phone&, const Name&);
Record lookup(const Phone&, const Name& = "");//区别在于给形参提供了默认值
Record lookup(Phone);
Record lookup(const Phone);//区别在于是否const
其中第三组可能会让人产生函数的形参个数不同的假像,:因为有的时候可以凭是否const来重载,比如引用传递和指针传递.
标题::文件的组织
一个程序往往由多个源文件组成,这些代码究竟应该放在哪个源文件里、哪些代码可以放在同一个源文件里、.
说它是管理层面的问题,.
首先,、,那就要分不同的文件夹来存放了.
其次,,“#include”的时候要注意顺序.
最后,也是最重要的一点,有些代码在同一工程中可以重用(或必须重用),、函数的声明、变量的声明等,不可
C++primer读书笔记 来自淘豆网m.daumloan.com转载请标明出处.