C++3笔记
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++3笔记相关的知识,希望对你有一定的参考价值。
1 函数包装器管理内联函数
2 函数包装器管理外部函数
3 函数模板数据类型覆盖
1 函数包装器管理内联函数
函数包装器
1设计执行接口,接口设计关卡(收保护费,插入if..else实现),计数器
2通知函数包装器依赖于函数模板,实现通用泛型
3函数代码可以内嵌在另外一个函数
4函数包装器,用于管理内嵌函数,外部函数调用
1 #include <iostream> 2 #include <functional> 3 using namespace std; 4 5 //函数包装器 6 //1设计执行接口,接口设计关卡(收保护费,插入if..else实现),计数器 7 //2通知函数包装器依赖于函数模板,实现通用泛型 8 //3函数代码可以内嵌在另外一个函数 9 //4函数包装器,用于管理内嵌函数,外部函数调用 10 11 //函数包装器,T是数据类型,F是函数 12 template <typename T, typename F> 13 T run(T v, F f) 14 { 15 static int count = 0;//实现计数器 16 count++; 17 cout << "run 一个参数的包装器 执行" << count << "次数" << endl; 18 if (count > 1)//计数器,收保护费 19 { 20 T vs(0); 21 return vs; 22 } 23 return f(v);//函数传入参数 24 } 25 26 template <typename T, typename F> 27 T run(T v1, T v2, F f) 28 { 29 return f(v1, v2);//函数传入参数 30 } 31 32 void main() 33 { 34 double db = 12.9; 35 int num1 = 29; 36 int num2 = 19; 37 38 //函数包装器 39 //第1个double是返回值类型,第2个double是参数类型 40 function<double(double)> fun1 = [](double u) 41 { 42 return u * 2; 43 }; 44 45 function<double(double)> fun2 = [](double u) 46 { 47 return u * u; 48 }; 49 50 function<int(int, int)> fun3 = [](int u1, int u2) 51 { 52 return u1 + u2; 53 }; 54 //函数包装器 55 56 cout << run(db, fun1) << endl; 57 58 cout << run(db, fun2) << endl; 59 60 cout << run(num1, num2, fun3) << endl; 61 62 system("pause"); 63 }
2 函数包装器管理外部函数
1 #include <iostream> 2 #include <functional> 3 using namespace std; 4 5 //函数包装器 6 //1设计执行接口,接口设计关卡(收保护费,插入if..else实现),计数器 7 //2通知函数包装器依赖于函数模板,实现通用泛型 8 //3函数代码可以内嵌在另外一个函数 9 //4函数包装器,用于管理内嵌函数,外部函数调用 10 11 //函数包装器,T是数据类型,F是函数 12 template <typename T, typename F> 13 T run(T v1, T v2, F f) 14 { 15 return f(v1, v2);//函数传入参数 16 } 17 18 int cheng(int a, int b)//外部函数 19 { 20 return a*b; 21 } 22 23 void main() 24 { 25 int num1 = 29; 26 int num2 = 19; 27 28 //函数包装器 29 //第1个int是返回值类型,第2个、第3个int是参数类型 30 function<int(int, int)> fun = cheng; 31 //函数包装器 32 33 cout << run(num1, num2, fun) << endl;//551 34 35 system("pause"); 36 }
3 函数模板数据类型覆盖
1 #include <iostream> 2 using namespace std; 3 4 template <typename T> 5 void swap1(T &a, T &b) 6 { 7 cout << "通用函数模板" << endl; 8 T temp = a; 9 a = b; 10 b = temp; 11 } 12 13 void main() 14 { 15 int num1 = 100; 16 int num2 = 10; 17 char ch1 = ‘Z‘; 18 char ch2 = ‘A‘; 19 20 cout << num1 << " " << num2 << endl; 21 cout << ch1 << " " << ch2 << endl; 22 23 swap1(num1, num2); 24 swap1(ch1, ch2); 25 26 cout << num1 << " " << num2 << endl; 27 cout << ch1 << " " << ch2 << endl; 28 29 system("pause"); 30 }
结构体可以直接赋值
所有成员都是public的类型可以赋值,比如class
1 #include <iostream> 2 using namespace std; 3 4 class info 5 { 6 public: 7 char name[40]; 8 double db; 9 int data; 10 }; 11 12 template <typename T> 13 void swap1(T &a, T &b) 14 { 15 cout << "通用函数模板" << endl; 16 T temp = a; 17 a = b; 18 b = temp; 19 } 20 21 void main() 22 { 23 info info1 = { "abcdefg",30.9,10 }; 24 info info2 = { "hijklmn",9.1,1 }; 25 26 cout << info1.name << " " << info1.db << " " << info1.data << endl; 27 cout << info2.name << " " << info2.db << " " << info2.data << endl; 28 29 swap1(info1, info2); 30 31 cout << info1.name << " " << info1.db << " " << info1.data << endl; 32 cout << info2.name << " " << info2.db << " " << info2.data << endl; 33 34 system("pause"); 35 }
函数模板实现通用,可以根据自由数据类型进行优化
函数模板的覆盖
1 #include <iostream> 2 using namespace std; 3 4 class info 5 { 6 public: 7 char name[40]; 8 double db; 9 int data; 10 }; 11 12 template <typename T> 13 void swap1(T &a, T &b) 14 { 15 cout << "通用函数模板" << endl; 16 T temp = a; 17 a = b; 18 b = temp; 19 } 20 21 template <> 22 void swap1(info &info1, info &info2)//通用模板可以实现通用,针对自己的数据类型做出优化 23 { 24 cout << "特有函数模板" << endl; 25 info temp = info1; 26 info1 = info2; 27 info2 = info1; 28 } 29 30 void main() 31 { 32 info info1 = { "abcdefg",30.9,10 }; 33 info info2 = { "hijklmn",9.1,1 }; 34 35 cout << info1.name << " " << info1.db << " " << info1.data << endl; 36 cout << info2.name << " " << info2.db << " " << info2.data << endl; 37 38 swap1(info1, info2); 39 40 cout << info1.name << " " << info1.db << " " << info1.data << endl; 41 cout << info2.name << " " << info2.db << " " << info2.data << endl; 42 43 system("pause"); 44 }
123
以上是关于C++3笔记的主要内容,如果未能解决你的问题,请参考以下文章
C语言必会面试题(3耶稣有13个门徒,当中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:13人围坐一圈,从第一个開始报号:1,2,3,1,2,3...。凡是报到“3”就退出圈子,...)(代码片段