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. 使用 PropTypes 进行类型检查

    注意: 从 React v15.5 开始 ,React.PropTypes 助手函数已被弃用,建议使用 prop-types 库 来定义contextTypes. 1 2 3 4 5 6 7 8 9 ...

  2. FFmpeg简单转码程序--视频剪辑

    学习了雷神的文章,慕斯人分享精神,感其英年而逝,不胜唏嘘.他有分享一个转码程序<最简单的基于FFMPEG的转码程序>其中使用了filter(参考了ffmpeg.c中的流程),他曾说想再编写 ...

  3. string类型和int类型之间的转换

    一.string转int 1. 使用string流 /* 字符串转整型 */ /* * istringstream:从 string 读取数据 * ostringstream:向 string 写入数 ...

  4. M1阶段的开发过程的一些反思

    今天八组队伍都做了项目的展示,和他们相比,我们的团队项目是显得最单薄的了,这里面的原因很多,固然我们团队整体的实力 比较弱,但是我们在M1项目开发过程中的种种错误表现也是导致我们项目失利的重要原因.下 ...

  5. 实验三 Java猜数字游戏开发

    课程:Java实验   班级:201352     姓名:程涵  学号:20135210 成绩:             指导教师:娄佳鹏   实验日期:15.06.03 实验密级:         ...

  6. 福大软工 Alpha 事后诸葛亮

    写在前面 林燊大哥 一路走来,好不容易,终于完结了. 设想和目标 1. 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 解决的问题 用户在进店之前无法得知店铺的优劣 ...

  7. 简单的树(summary)

    实验任务 可怜的 Bibi 丢了好几台手机以后,看谁都像是小偷,他已经在小本本上记下了他认为的各个地点的小偷数量. 现在我们将Bibi的家附近的地形抽象成一棵有根树.每个地点都是树上的 一个节点,节点 ...

  8. Apache优化之多路处理模块理解

    前言: 当项目被多人访问时导致访问数度变慢,查了许多资料,了解到Apache的核心模块——MPM(多路处理访问模块).在此对MPM的一些知识点进行整理. MPM_WINNT模块 windows系统使用 ...

  9. ArrayList底层实现

    ArrayList 底层是有数组实现,实际上存放的是对象的引用,而不是对象本身.当使用不带参的构造方法生成ArrayList对象时,实际会在底层生成一个长度为10的数组 当添加元素超过10的时候,会进 ...

  10. js全端

    js是世界上最好的语言之一,或许可以不用加之一 我是个js游戏前端开发者,但是我不局限于只是开发h5游戏,微信小游戏... js很强大很强大很强大,没有哪种语言能通吃,除了js. 网页, app, 服 ...