c++ 读书笔记(四)

目录

  • 引用
  • 参数传递
  • 默认参数
  • 函数重载
  • 函数模板
    • 重载的模板
  • 链接性
    • 5中变量存储方式
  • Const成员函数
  • this指针

引用

将引用 参数声明为常量数据的引用的理由有三个:

  1. 使用const可以避免无意中修改数据的编程错误;
  2. 使用const使函数能够处理const和非const实参,否则将只能接受非const数据;
  3. 使用const引用使函数能够正确生成并使用临时变量;
临时变量是指:
double refcube(const double &ra)
{
return ra*ra*ra;
}
long edge=5L;
double size=3.0;
double c1=refcube(edge);	//edge的类型不是double,编译器会生成一个临时匿名变量,并让ra指向他。
double c2=refcube(size+7.0);	//size+7.0 虽然类型正确,但是没有名字,编译器也会生成一个临时变量;

这些临时变量只在函数调用期间存在,

参数传递

对于传递值而不修改函数:

数据对象 参数传递的类型
数据对象小,如内置数据类型 值传递
数组 指针,并声明为const
较大的结构 使用const或const引用
类对象 const引用

对于修改调用函数中数据的函数:

数据对象 参数传递的类型
内置数据类型 指针
数组 指针
类对象 引用

默认参数

对于带参数列表的函数,必须从右向左默认添加值

函数重载

在函数执行相同的任务,但使用不同形式的数据才采用函数重载;
函数重载的关键在于函数的参数列表,也称为函数特征标。与函数的返回类型无关;
c++允许定义相同的函数,条件是他们的特征标不同。如果参数数目或参数类型,排列顺序不同,则特征标也不同。

函数模板

如果需要多个将同一种算法用于不同类型的函数,就使用模板
关键字为template ,typename/class[在c++98之前,使用class来创建模板]

示例:
template <typename anyType>
void swap(anyType &a,anyType &b)
{
	anyType temp;
	temp=&a;
	a=b;
	b=temp;
}

重载的模板

模板可以像函数一样重载,并非所有的模板参数都必须是模板参数类型

template <typename anyType>
void swap(anyType &a,anyType &b);

template <typename anyType>
void swap(anyType *a,anyType *b,int n);

链接性

  1. 外部链接性 :可在其他文件中访问
  2. 内部链接性 : 只能在当前文件中访问 (静态全局变量)
  3. 无链接性 :只能在当前函数或代码块中访问

5中变量存储方式

存储描述 持续性 作用域 链接性 如何声明
自动 自动 代码块 在代码块中
寄存器 自动 代码块 代码块中,使用关键字register
静态,无链接性 静态 代码块 在代码块中,使用关键字static
静态,外部链接性 静态 文件 外部 不在任何函数内
静态,内部链接性 静态 文件 内部 不在任何函数内,使用关键字static

静态变量 默认初始化为0

  1. volatile
    表明程序代码没有对内存单元进行修改,其值也可能发生变化。
    该关键字的作用是为了改善编译器的优化能力。
  2. mutable
    指出即使结构或类变量为const,某个成员也可以被修改

Const成员函数

将const关键字放在函数括号的后面

void show () const;

void stock::show() const;

this指针

this指针指向用来调用成员函数的对象
每个成员函数(包括构造函数与析构函数)都有一个this指针,this指针指向调用对象。如果需要引用整个调用对象,可以使用表达式*this。

你可能感兴趣的:(c++)