Essential C++ 笔记 - 第二章面向过程的编程风格

Essential C++ 笔记 - 第二章面向过程的编程风格

一、传址与传值

// 传值(by value)
void swap(int val1, int val2) {
	int temp = val1;
	val1 = val2;
	val2 = temp;
} // 调用函数swap后,val1和val2的值不互换

//传址(by reference)
void swap(int& val1, int& val2) {
	int temp = val1;
	val1 = val2;
	val2 = temp;
} // 调用函数swap后,val1和val2的值互换
void swap(int* val1, int* val2) {
	int temp = *val1;
	*val1 = *val2;
	*val2 = temp;
} // 调用函数swap后,val1和val2的值互换

// 传址的方式让函数的参数和传入的实际对象产生了关联,函数内对入参的改变会影响到实际对象。

将参数声明为reference的理由:
1、希望得以直接对所传入的对象进行修改
2、降低复制大型对象的负担

reference参数和pointer参数的区别:
pointer可能不指向某个实际对象,当提领pointer时,需要先确定其值非0
reference必定会代表某个对象

二、动态内存管理

int* pi = new int; 		// 未初始化
int* pi = new int(); 	// 零值初始化
int* pi = new int(1024);// 定值初始化,初始化为1024
delete pi; // 删除new的单个对象
pi = nullptr;

int* pia = new int[24]; // 生成一个数组对象
delete [] pia; // 删除new的数组对象
pia = nullptr;

三、局部静态对象

// 函数返回后,局部静态对象仍然存在
// 在其他函数中仍然可以访问elems中的内容
vector<int>* fibon_seq(int size) {
	static vector<int> elems;
	// ... 
	return &elems;
}

四、函数重载( overloading )

// 传入的参数表不相同,调用同名但内容不相同的程序。
void display_message(char);

// 传入参数类型不同
void display_message(const string&); 
// 传入参数数目不同
void display_message(char, char);
// const重载
void display_message(char) const;
// 传入参数的顺序不同
void display_message(char, int);
void display_message(int, char);

// 返回值不同不能作为函数重载的依据
// 如果函数形参是指针或引用通过const修饰,则是函数重载;否则不是函数重载

void display_message(char* c);
void display_message(const char* c);
// 编译通过
void display_message(char c);
void display_message(const char c);
// 编译失败

五、函数指针( Pointer to Functions )

// 函数指针的应用
const vector<int>* fibon_seq(int size);
const vector<int>* lucas_seq(int size);
const vector<int>* pell_seq(int size);

bool seq_elem(int pos, int& elem, const vector<int>* (*seq_ptr)(int)) {
	// ...
}
// 使用fibon_seq、lucas_seq、pell_seq作为函数seq_elem的入参

六、头文件
头文件使用尖括号(<>)和双引号的区别:
如果该文件被认定是标准的或者项目专属的头文件,我们便以尖括号将文件名括住,编译器搜寻此文件时,会先在某些默认的驱动器目录中找寻;
如果该文件时由双引号括住的,此文件便被认为时一个用户自行提供的头文件,编译器搜寻此文件时,会由含入此文件的文件苏哦在驱动器目录开始找起。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值