一、函数与指针
1.1 函数指针
1.2 函数指针数组
- 功能:集成多个函数指针到一个数组里,用数组指针调用各个函数
#include <iostream>
using namespace std;
typedef double(*pfun)(int);
double f1(int x);
double f2(int x);
int main()
{
pfun parr[2] = { f1,f2 };
pfun (*parr_1)[2] = &parr;
parr[0](9);
(*parr_1)[0](9);
(**parr_1)(9);
parr[1](9);
(*parr_1)[1](9);
(*(*parr_1+ 1))(9);
}
double f1(int x)
{
cout << "f1函数" << endl;
return 0;
}
double f2(int x)
{
cout << "f2函数" << endl;
return 0;
}
二、引用
2.1 功能
- 定义:一种数据类型,相当于变量别名,共用变量内存块,称为指向变量的引用
- 特点:必须在定义的同时赋值,常用于类与结构
2.2 传值、指针和引用适用范围
- 函数不修改实参
- 按值传递:数据对象很小的一类
- 指针:数据对象为数组或结构,指针需要声明为常量指针
- 引用:数据对象为类对象
- 函数修改实参
2.3 引用实现
- 变量引用
int rat = {};
int &cat = rat;
- 函数结构引用
#include <iostream>
#include <string>
using namespace std;
struct product
{
std::string name;
int bottle;
};
void display(const product & dis_good);
product & good_add(product & good_sum, const product & good_from);
int main()
{
product one = { "啤酒:",8 };
product two = { "白酒:",3 };
product three = { "威士忌:",9 };
product total = { "累计:" };
display(good_add( total , one ));
good_add( good_add( total, two ) , three);
display( total );
}
product & good_add(product & good_sum, const product & good_from)
{
good_sum.bottle += good_from.bottle;
return good_sum;
}
void display(const product & dis_good)
{
cout << dis_good.name << dis_good.bottle << endl;
}
- 注释
- display函数:传入的参数均会被隐式转化成const类参数,编程者须保证同类型的const和非const转换,避免非同类型转换
- 返回引用的函数(good_add函数)
- 写法一:
product good_add(product & good_sum, const product & good_from)
return good_sum;
:返回的是被实参指向的形参结构good_sum的一个拷贝- 返回值:放在临时内存中,跟原函数无关
- 写法二:
product & good_add(product & good_sum, const product & good_from)
return good_sum;
:返回的是被实参指向的形参结构good_sumproduct &
:表明返回的数据的数据类型为product类型的引用,即传进去的实参
- 应避免返回指向临时变量的引用
做法:措施为返回一个作为实参传递给函数的引用,如good_sum
后果:若不这样做,函数将成为临时变量的引用,而临时变量在函数运行后将消失
三、函数特性
3.1 默认参数
3.2 函数重载
- 定义:C++中用一个函数名定义多个函数,并以形参类型和个数区分具体调用哪个函数
- 适用范围:函数执行相同的任务,但使用不同形式的数据时,适用函数重载
- 声明
double fun(int);
double fun(int, double);
double fun(double, int);
- 调用
fun(3);
fun(3,2.3);
fun(2.3,3);
- 特例
- 返回值不区分:
double fun();
和int fun();
一样 - 引用不区分:x和&x一样
- const可区分:
void fun(const char * pt){}
接收的实参无限制,void fun(char * pt){}
只接受非const实参,若此二者出现在一个重载函数里,非const实参给后者,const实参给前者
四、内置函数
4.1 时间函数
- 代码示例
#include <iostream>
#include <ctime>
using namespace std;
int main()
{
struct tm st_set;
st_set.tm_sec = 10;
st_set.tm_min = 10;
st_set.tm_hour = 6;
st_set.tm_mday = 25;
st_set.tm_mon = 2;
st_set.tm_year = 120;
st_set.tm_wday = 6;
time_t time_now;
time(&time_now);
struct tm *st_now;
st_now = localtime(&time_now);
if (time_now == mktime(st_now))
cout << "时间戳测试无误" << endl;
char date_str[20] = {};
strftime(date_str, sizeof(date_str), "%Y-%m-%d %H:%M:%S", st_now);
cout << date_str << endl;
}
上一篇:C++启蒙笔记(四)—函数
下一篇:C++启蒙笔记(六)—类(一)