C++ primer(第五版) 练习 6.56
题目:调用上述vector对象(练习 6.55中的)中的每个元素并输出其结果。
答:
第一次把函数声明跟定义写在了不同的文件,发现貌似跟书上讲的不太一样啊???
定义函数体的文件里面没有 #include 声明函数的文件,就可以编译,#include 了反而就重复声明了……
mypractice.h
/*
mypractice.h
编写函数声明,令其接受两个int形参并且返回类型也是int;
然后声明一个vector对象,令其元素是指向该函数的指针。
编写4个函数,分别对两个int值执行加、减、乘、除运算;在上一题
创建的vector对象中保存指向这些函数的指针。
*/
#include <vector>
using std::vector;
using pFunc= int (*)(int x, int y);
vector<pFunc> iVal;
int m_add(int a, int b);
int m_dec(int a, int b);
int m_mul(int a, int b);
int m_div(int a, int b);
mypractice.cpp 貌似这个文件该 #include "mypractice.h" 的吧?
/*
mypractice.cpp
定义
int m_add(int a, int b);
int m_dec(int a, int b);
int m_mul(int a, int b);
int m_div(int a, int b);
*/
int m_add(int a, int b)
{
return a + b;
}
int m_dec(int a, int b)
{
return a - b;
}
int m_mul(int a, int b)
{
return a*b;
}
int m_div(int a, int b)
{
return a / b;
}
/*
mymain.cpp
调用上述vector对象中的每个元素并输出其结果。
*/
#include <iostream>
#include "mypractice.h"
using std::cout;
using std::endl;
int main()
{
int v1 = 6, v2 = 3;
iVal.push_back(m_add);
iVal.push_back(m_dec);
iVal.push_back(m_mul);
iVal.push_back(m_div);
for (auto a : iVal)
cout << a(v1, v2) << endl;
return 0;
}
执行结果: