C++基础--《essential》的阅读笔记

多方查证,看视频太浪费时间了,看这本书,觉得还不错,写写博客,划划水。


默认参数值

在C++的使用过程中,我们会调用函数,其中有含参,也有不含参的。在C++的规则中,调用函数时,参数是可以默认的。必须满足以下规则。

1. 默认参数可以定义在函数声明时,也可以定义在函数实现。但是不可以两者都设置默认参数。

2.一旦设置了默认参数,那么该参数向右所有参数都必须设置默认值。

一般来说,我们将函数的默认值,都放在函数的头文件中,关于头文件的内容,后续会补充。

局部静态对象

局部动态对象(local static object),先看程序,感悟详聊


int fibon_seq(int size)
{
	const int max_size = 1024;
	static vector < int > elems;

	if (size < 0 || size >max_size)
		exit(-1);
	for (int i = elems.size(); i < size; i++)
	{
		if (i == 0 || i == 1)
			elems.push_back(1);
		else
			elems.push_back(elems[i - 1] + elems[i - 2]);
	}
    return &elems;
}

根据上一篇笔记所记载,在函数中声明的变量,它是有存活周期的,就是在一个函数创建到结束。 按照斐波那契数列数列的计算方式,如果我们想查找他的第3,5,9,11.我们是不是得调用四次,分别是fibon_seq(3),fibon(5),fibon(9),fibon(11)。如果把一次计算抽象为T,我们是不是要调用3+5+9+11个T。并且在每次计算完之后,我们都会释放掉这个变量。基于此,我们就想引入局部静态变量。顾名思义,我们的局部静态变量,就是你来或不来,它都在函数中,一动不动。那么如果这个局部静态变量存储的值足够多时,那么你哪怕查找它的5,11,111,555的数值,它的查找时间只会有4个T.

官方说法:和局部性非静态对象不同的时,局部静态对象所处的内存空间,即使在不同的函数调用过程中,依然持续存在。

重载函数

简而言之,重载函数就是针对同名函数,因为输入参数的不同,而调用不同的函数。

函数指针

//所谓函数指针,必须指明其指向之函数的返回值类型及参数表,返回值类型为const vector<int> *.
//此外,函数指针的定义式必须将*置于某个位置,表示这份定义所表现的是一个指针,当然,最后还必须给予一个名称
const vector<int>* (*seq_ptr)(int);

bool seq_elem(int pos, int& elem, const vector<int>* (*seq_ptr)(int))
{
	//调用seq_ptr所指的函数
	const vector<int>* pseq = seq_ptr(pos);

	if (!pseq)
	{
		elem = 0;
		return false;
	}
	elem = (*pseq)(pos - 1);
	return true;
}

虽然隐隐约约有点感觉,但这种事情还是得练手,才能感受灵活的变化。

//头文件中,我们使用双引号“”而非<>。如果我们在不同的驱动器目录下,我们使用尖括号。
//如果表头文件和含入此文件的程序代码位于同一个驱动器目录下,我们便使用双引号。
//如果此文件被认定是标准的、或项目专属的头文件,我们便可以使用尖括号将文件名括住;编译器搜索此文档时,
//会先在某些某些默认的驱动器目录中找寻,如果文件由成对的双引号括住,此文件便被认为是一个用户自行提供的头文件;搜寻此文件时
//会由含入此文件之文件所在的驱动器目录开始找起。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值