1.重载函数,也就是说一个名字可以对应几个不同的函数。

2.内置类型的未初始化局部变量将产生未定义的值。

3.局部静态对象在程序执行路径第一次进过对象定义语句时初始化,并且直到程序终止才被销毁。
内置类型的局部静态变量初始化为0.

4.函数的声明也称函数原型。

5.含有函数声明的头文件应该被包含到定义函数的源文件中。(来让编译器验证函数的定义和声明是否匹配)

6.熟悉C语言的程序员常常使用指针类型的形参访问函数外部的对象。在C++语言中,建议使用引用类型的形参代替指针。

7.如果函数无需改变引用形参的值,最好将其声明为常量引用。

8.在C++语言中,允许我们定义若干具有相同名字的函数,不过前提是不同函数的形参列表应该有明显的区别。

9.我们可以使用非常量值初始化一个底层const对象,但是反过来不行(非常量指针不能指向常量)。普通引用必须用同类型的对象初始化。

10.使用引用而非常量引用也会极大的限制函数所能接受的实参类型。

11.数组引用形参的写法:
f(int (&arr)[10])
(&arr)这个括号必不可少,不然就变成了引用数组了f(int &arr[10])
数组指针同理,应该写为 f(int (*arr)[]),并且与f(int arr[][10])是类似等价的。

12.当使用argv中的实参时,一定要记得可选的实参从argv[1]开始,argv[0]保存当前程序的名字,而非用户输入。

13.如果形参的数量未知,但是全部的实参的类型都是相同已知的,可以使用initiaizer_list类型的形参,他的用法同vector,详见C++Prime p197.

14.返回数组指针函数的定义方式:运用重定义
typedef int arrT[10];
using arrT = int[10];
arrT* func(int i);

15.假如有两个函数,它们的形参列表函数名字都一样,但是返回类型不一样,则第二个函数声明是错误的。

16.调用重载函数的过程:
顶层const不影响传入函数的对象。
函数匹配-----重载确定   (三种情况)-> 最佳匹配    ->无匹配    ->二义性调用(有多余一个函数可以匹配,但是每一个都不是明显的最佳选择。)

17.在C++语言中,名字查找发生在类型检查之前。

18.默认实参作为形参的初始值出现在形参列表中。一旦某个形参被赋予了默认值,它后面的所有形参都必须有默认值。
默认实参的放置顺序:尽量让不怎么使用默认值的形参出现在前面,而让那些经常使用默认值的形参出现在后面。
通常,应该在函数声明中指定默认实参,并将该声明放在合适的头文件中。

19.预处理宏:assert在头文件cassert中
表达式: assert(expr);
先对表达式求值,如果为真,什么也不做,如果为假,输出信息并终止程序执行。
而assert依赖于NDEBUG预处理变量,默认状态下没有定义这个变量,一旦定义了,assert什么都不做。

20.所有算术类型转换的级别都一样。例如从int 到unsigned int 的转换并不比从int 向double高

21.声明函数指针:
函数原型:
bool lengthCompare(const string &,const string &);
则指向这个函数的指针可以定义为
bool (*pf)(const string &,const string &);
*pf的两边的括号必不可少,否则就定义了一个返回类型是bool指针的函数

给函数指针赋值或者是调用时候,&,*可用可不用,效果相同
例如:
pf = lengthCompare;
pf = &lengthCompare;//两者等价,因为当我们把函数名作为一个值使用时,会自动转换为指针。

bool b1 = pf(......);
bool b2 =  *pf(.......);这两者也等价。

22.当我们将decltype作用于某个函数时,它返回函数类型而非指针类型。因此,我们显式的加上*以表明我们需要返回指针,而非函数本身。

23.IO类属于不能被拷贝的类型,因此将io类型的参数传入的时候,只能通过引用来进行。

24.定义类中执行输出任务的函数的时候应该尽量减少对格式的控制,这样可以确保由用户代码来决定是否换行。

25.构造函数,名字与类名相同,类中控制对象初始化的函数。无论何时,只要类被创建,就会自动执行构造函数。
不能被声明为const.

26.默认构造函数只能用于简单的类的原因:
①一个类如果在某种情况下需要控制对象初始化,那么该类很有可能在所有情况下都需要控制。(只有当类中没有声明任何构造函数的时候,编译器才会自动的生成默认构造函数)
②如果类内包含有内置类型或者是复合类型,这时使用默认构造函数,那些量的结果是未知的。
③如果类中包含其他类型的成员,且这个成员没有默认构造函数,那么编译器无法初始化该成员。

27.人为的定义合成的默认构造函数:Sale_data() = default;
构造函数:Sale_data(const std::string &s,unsigned n,double p):bookNo(s),units_sold(n),revenue(p*n){};

28.构造函数的用法:在定义的时候直接在对象名后面加括号,括号里面加上要输给构造函数的参数即可。例子:
Sales_data item3("0-201-78345-X", 3, 20.00);

29.使用访问说明符和class,struct来封装类
pubilic访问说明符之后定义接口。
private分装类的实现细节
访问说明符的有效范围直到出现下一个访问说明符或者到达类的结尾处为止。
例子:
class Sale_data{
public:
Sale_data() = default;
Std::string isbn() const {return bookNo;}
Sale_data &combine(const Sale_data&)
private:
double avg_price() const {return units_sold ? revenue/units_sold : 0;}
std::string bookNo;
unsigned units_sold = 0;
double revenue = 0.0;
};
double revenue = 0.0;
x
10
 
1
class Sale_data{
2
public:
3
     Sale_data() = default;
4
     Std::string isbn() const {return bookNo;}
5
     Sale_data &combine(const Sale_data&)
6
private:
7
     double avg_price() const {return units_sold ? revenue/units_sold : 0;}
8
     std::string bookNo;
9
     unsigned units_sold = 0;
10
     double revenue  = 0.0;
11
};

30.class和struct的区别,在上例中两者可以替换,两者的唯一区别就是在第一个访问说明符之前定义的成员的默认访问方式的不同,class处理为private,struct处理为public.

31.封装优点:
①用户代码不会无意间破环封装对象的状态。
②被封装的类的具体实现细节可以随时改变,而无须调整用户级别的代码。

32.类可以允许其他类或者函数访问他的非公有成员,方法是令其他类或者函数成为它的的友元,只需增加一条以friend关键字开始的函数声明语句即可。我们必须在元友声明之外再专门对函数进行一次声明。(虽然很多编译器没有强制要求声明,也可以调用那个函数)但是为了可移植性,还是提供一个独立的声明。
在类块中位置不限,例子:
class Sale_data {
friend Sale_data add(const Sale_data &,const Sales_data&);
public:........
......
.....

};

33.可变数据成员:通过在变量的声明前加入mutable关键字,可以定义一个可变数据成员,这个成员永远不会是const,即使它是const对象的成员。

34.类内初始值必须使用=的初始化形式,或者花括号括起来的直接初始化形式。

35.即使两个类的成员列表完全一致,它们也是不同的类型。

36.C++中可以直接使用类名或者struct /class加类名表示类型,后者是从C继承来的。

37.类可以把其他类,其他类的成员函数定义成友元。友元关系不存在传递性。

Chapter6(函数) --C++Prime笔记的更多相关文章

  1. Hive自定义函数的学习笔记(1)

    前言: hive本身提供了丰富的函数集, 有普通函数(求平方sqrt), 聚合函数(求和sum), 以及表生成函数(explode, json_tuple)等等. 但不是所有的业务需求都能涉及和覆盖到 ...

  2. R语言函数化学习笔记6

    R语言函数化学习笔记 1.apply函数 可以让list或者vector的元素依次执行一遍调用的函数,输出的结果是list格式 2.sapply函数 原理和list一样,但是输出的结果是一个向量的形式 ...

  3. R语言函数化学习笔记3

    R语言函数化学习笔记3 R语言常用的一些命令函数 1.getwd()查看当前R的工作目录 2.setwd()修改当前工作目录 3.str()可以输出指定对象的结构(类型,位置等),同理还有class( ...

  4. R语言函数化编程笔记2

    R语言函数化编程笔记2 我学过很多的编程语言,可以我写的代码很啰嗦,一定是我太懒了.或许是基础不牢地动山摇 1.为什么要学函数 函数可以简化编程语言,减少重复代码或者说面向对象的作用 2.函数 2.1 ...

  5. R语言函数化编程笔记1

    R语言函数化编程笔记1 notes:有一个不错的网站叫做stack overflow,有问题可以从上面找或者搜索答案,会有大佬相助. 在github上面可以找到很多R的扩展包,如果自己额修改被接受,那 ...

  6. JavaScript权威设计--JavaScript函数(简要学习笔记十一)

    1.函数调用的四种方式 第三种:构造函数调用 如果构造函数调用在圆括号内包含一组实参列表,先计算这些实参表达式,然后传入函数内.这和函数调用和方法调用是一致的.但如果构造函数没有形参,JavaScri ...

  7. JavaScript权威设计--JavaScript函数(简要学习笔记十)

    1.函数命名规范 函数命名通常以动词为前缀的词组.通常第一个字符小写.当包含多个单词时,一种约定是将单词以下划线分割,就像"like_Zqz()". 还有一种就是"lik ...

  8. Chapter2(变量和基础类型)--C++Prime笔记

    数据类型选择的准则: ①当明确知晓数值不可能为负时,选用无符号类型. ②使用int执行整数运算.在实际应用中,short常常显得太小而long一般和int有一样的尺寸.如果运算范围超过int的表示范围 ...

  9. Chapter1(预科)--C++Prime笔记

    心得体会: 因为之前一直在用在学C,因此在看完C++Prime第一章后,就有中在一个培训班中,一个老师用一个简单的项目来带你了解这种语言的特性的感觉.当然这个告诉是在让你脑子固化接受一些点的前提下. ...

随机推荐

  1. 欢迎来怼--第二十二次Scrum会议

    欢迎来怼--第二十二次Scrum会议 一.小组信息 队名:欢迎来怼 小组成员 队长:田继平 成员:李圆圆,葛美义,王伟东,姜珊,邵朔,阚博文 小组照片 二.开会信息 时间:2017/11/10 17: ...

  2. WPF四则运算《《《《《策略模式

    设计思路:           因为之前没有用过WPF,听说和window窗体语法类似,就想着仿照之前的Window窗体做的,首先用三个textbox存储数据,添加一个comboBox,利用索引选择运 ...

  3. HttpContext.Current.Server.MapPath("/") 未将对象设置到对象的实例异常。

    多线程中的System.Web.HttpContext.Current.Server.MapPath("/") 多线程中Server.MapPath会失效... 网上找到几种解决方 ...

  4. C51学习笔记

    转自:http://blog.csdn.net/gongyuan073/article/details/7856878 单片机C51学习笔记 一,   C51内存结构深度剖析 二,   reg51.头 ...

  5. sprintf函数 %6.2f

    %6.2f6表示数据表示至少6位,后面的.2表示小数点后保留两位 比如2342.123415用这个表示的话,结果就是2342.12如果不足六位就会在前面补空格超过六位的话正常显示 代码例子:int m ...

  6. [转贴] IPSEC From 知乎

    作者:埃文科技链接:https://zhuanlan.zhihu.com/p/44874772来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 认识IPSec IPSec ...

  7. token是干啥子的

    http://www.cnblogs.com/wweichao/p/9325668.html 在上面这篇博客中,我们知道了通过weibo提供的一系列接口,我们可以实现登录,然后也有了token,可以获 ...

  8. 【bzoj5084】hashit 广义后缀自动机+树链的并+STL-set

    题目描述 你有一个字符串S,一开始为空串,要求支持两种操作 在S后面加入字母C 删除S最后一个字母 问每次操作后S有多少个两两不同的连续子串 输入 一行一个字符串Q,表示对S的操作 如果第i个字母是小 ...

  9. 对HashMap的理解(三):ConcurrentHashMap

    HashMap不是线程安全的.在并发插入元素的时候,有可能出现环链表,让下一次读操作出现死循环.避免HashMap的线程安全问题有很多方法,比如改用HashTable或Collections.sync ...

  10. C语言中变量名及函数名的命名规则与驼峰命名法

    一.C语言变量名的命名规则:(可以字母,数字,下划线混合使用) 1. 只能以字母或下划线开始:2. 不能以数字开始:3. 一般小写:4. 关键字不允许用(eg:int float=2//error  ...