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. passwd命令详解

    基础命令学习目录首页 passwd命令用于设置用户的认证信息,包括用户密码.密码过期时间等.系统管理者则能用它管理系统用户的密码.只有管理者可以指定用户名称,一般用户只能变更自己的密码. 语法 pas ...

  2. React 之容器组件和展示组件相分离解密

    Redux 的 React 绑定库包含了 容器组件和展示组件相分离 的开发思想.明智的做法是只在最顶层组件(如路由操作)里使用 Redux.其余内部组件仅仅是展示性的,所有数据都通过 props 传入 ...

  3. 将React Native 集成进现有OC项目中(过程记录) 、jsCodeLocation 生成方式总结

    将RN集成到现有OC项目应该是最常见的,特别是已经有OC项目的,不太可能会去专门搞个纯RN的项目.又因为RN不同版本,引用的依赖可能不尽相同,所以特别说明下,本文参考的文档是React Native ...

  4. Hibernate连接数据库一直报NullPointerException

    原来是少了这个.. //private HibernateTemplate hibernateTemplate; //少了下面 public HibernateTemplate getHibernat ...

  5. 超实用 2 ArrayList链表之 员工工资管理系统

    package ArrayList的小程序; import java.io.*; import java.util.*; public class kkk { /** * 作者:Mr.fan * 功能 ...

  6. “吃神么,买神么”的第二个Sprint计划

    “吃神么,买神么”的第二个Sprint计划   一.现状   前台布局设计完成一个主页,可以让浏览者了解我们网站的功能,这是第一个阶段的Spring完成的事情.由于没有实际的功能体现,所以第二阶段开始 ...

  7. IHttpModule理解-知识补充

    文章:IHttpModule的那些事 可以自定义类实现IHttpModule接口,然后实现接口方法Init,Init方法可以得到HttpApplication 的实例化对象. 然后给对象的事件的注册各 ...

  8. 在虚拟机中安装Ubuntu详细过程

    参考:http://blog.csdn.net/u013142781/article/details/50529030

  9. 七类网线 支持10gb/s的速度的计算方法

    0. 说明 我是数学白痴, 只是套了下公式... 1. 七类网线的参数: 七类线 ISO/IEC 7类/F级标准 中最新的一种双绞线,它主要为了适应万兆位以太网技术的应用和发展.但它不再是一种非屏蔽双 ...

  10. ACM数论之旅9---中国剩余定理(CRT)(壮哉我大中华╰(*°▽°*)╯)

    中国剩余定理,又名孙子定理o(*≧▽≦)ツ 能求解什么问题呢? 问题: 一堆物品 3个3个分剩2个 5个5个分剩3个 7个7个分剩2个 问这个物品有多少个 解这题,我们需要构造一个答案 我们需要构造这 ...