// 701.cpp : Defines the entry point for the console application.
//函数指针和引用
#include "stdafx.h"
#include <iostream>
void print(int i)
{
std::cout << i << std::endl;
}
void print2(int i)
{
std::cout << i+1 << std::endl;
}
void multiply(int& nDest, int nBy)
{
nDest *= nBy;
}
void print_something()
{
std::cout << "something" << std::endl;
}
int sayHello()
{
std::cout << "Hello, World!" << std::endl;
return 10;
}
void call_r_func(void (&func)(int))
{
func(1);
func(2);
func(3);
}
void call_p_function(void (*func)())
{
func();
}
void call_p_func(void (*func)(int))
{
func(1);
func(2);
func(3);
}
void call_p_func2(void (*func)(int& , int ))
{
int i=1;
func(i,101);
std::cout << "i = " << i << std::endl;
}
int main()
{
//函数指针
void (*pFunction_1)(int);
pFunction_1 = &print2;
pFunction_1(1);
pFunction_1 = &print;
pFunction_1(1);
// 输出结果为1
void (*pFunction_2)(int&, int) = &multiply;
int i = 1;
pFunction_2(i, 10);
std::cout << "i = " << i << std::endl;
// 输出结果为10
void (*pFunction_3)();
pFunction_3 = &print_something;
pFunction_3();
// 输出结果为something
int (*pFunction_4)();
pFunction_4 = &sayHello;
int a = pFunction_4();
// 输出结果为Hello, World!
std::cout << a << std::endl;
// 输出结果为10
//函数引用
// void (&rFunction_1)(int);
// 错误:未初始化引用!引用必须初始化
void (&rFunction_2)(int) = print;
rFunction_2(1);
// 输出1
rFunction_2 = print2;
rFunction_2(2);
// 输出3
void (&rFunction_3)(int&, int) = multiply;
i = 1;
rFunction_3(i, 10);
std::cout << i << std::endl;
// 输出10
void (&rFunction_4)() = print_something;
rFunction_4();
// 输出something
int (&rFunction_5)();
rFunction_5 = sayHello;
a = rFunction_5(); // 输出Hello, World!
std::cout << a << std::endl;
// 输出10
std::cout << "函数指针作为参数" << std::endl;
call_p_func(&print);
call_p_func(&print2);
call_p_function(&print_something);
call_p_func2(&multiply);
// call_p_function(&sayHello);
// call_p_function(sayHello);
// 上面两句对于某些编译器来说是一样的,但是推荐使用前者的写法,
// 这样可以是程序的可读性更好一些
std::cout << "函数引用作为参数" << std::endl;
call_r_func(print);
call_r_func(print2);
return 0;
}