日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

函数包装器,函数私有类处理

發布時間:2024/9/27 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 函数包装器,函数私有类处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


1、函數包裝器

#include<iostream>

#include<functional>

?

//函數包裝器

//第一,設計執行接口,接口設計關卡(),計數

//第二,函數包裝器依賴于函數模板,實現通用泛型

//第三,函數代碼可以內嵌在另外一個函數,實現函數懷孕

//函數包裝器,用于管理內嵌函數,外部函數調用

?

//函數包裝器, T數據類型, F是函數

template<typename T, typename F>

T run(T v, F f)

{

??? static int count = 0;

??? count++;//計數器

??? std::cout << "run? 一個參數的包裝器 執行" << count << "" << std::endl;

??? if (count > 1)

??? {

??????? T? vx(0);

??????? return? vx;

??? }

??? return f(v);//函數傳入參數

}

?

template<typename T, typename F>

T run(T v1, T v2, F f)

{

??? return f(v1, v2);//函數傳入參數

}

?

int? cheng(int a, int b)

{

??? return a*b;

}

?

void main()

{

??? using? std::cout;? //C++11. namespace,專門引用一個關鍵字,不需要std

??? using? std::endl;

??? using? std::function;

??? //using namespace std;

??? using? std::cin;

?

??? double db = 12.9;//double *2

??? int? num1 = 19;

??? int? num2 = 29;

?

??? //第一個double是返回值類型,第二個參數類型是參數類型

??? function<double(double)> fun1 = [](double u)

??? {

??????? return u * 2;

??? };

??? function<double(double)> fun2 = [](double u)

??? {

??????? return u*u;

??? };

??? function<int(int, int)> fun3 = [](int u1, int u2)

??? {

??????? return u1 + u2;

??? };

??? function<int(int, int)> fun4 = cheng; //fun4函數指針

?

??? cout << run(db, fun1) << endl;//調用

??? cout << run(db, fun2) << endl;//調用

??? cout << run(num1, num2, fun3) << endl;//調用

??? cout << run(num1, num2, fun4) << endl;//調用

??? cin.get();//等價于你輸入一字符getchar;

}

運行結果:

2.處理類的私有

#define _CRT_SECURE_NO_WARNINGS

#include<iostream>

#include<string>

?

//函數模板實現通用,可以根據自有數據類型,進行優化

?

//結構體可以直接賦值(沒有私有變量)

?

//所有成員都是公有的類型可以賦值(一開始初始化)

//如果類有私有成員變量,不可以用{}初始化

?

//類的對象之間默認是可以直接賦值

?

//類,結構體都有一個默認賦值操作= 淺拷貝 ,交換數據

?

//深拷貝用的最多,函數模板的覆蓋

class info

{

public:

??? char name[40];

??? char *p;

??? int data;

private:

??? int num;

public:

??? void set(int X)

??? {

??????? this->num = X;//通過接口設置私有變量

??? }

??? int get()

??? {

??????? return this->num;//返回值,副本機制

??? }

};

?

template<typename T>

void swap(T &a, T &b)

{

??? std::cout << "通用函數模板" << std::endl;

??? T temp = a;

??? a = b;

??? b = temp;//交換兩個變量

}

?

//模板為空,明確類型,

template<>

void? swap(info &info1, info &info2)

{

??? std::cout << "特有函數模板" << std::endl;

??? //通用模板可以實現通用,針對自己的數據類型做出優化

??? //計數器,對象交換計數器

??? info temp = info1;

??? info1 = info2;

??? info2 = temp;

}

?

void main()

{

??? info info1;

??? info info2;

??? std::strcpy(info1.name, "yincheng");

??? std::strcpy(info2.name, "chengyin ");

??? info1.data = 102;

??? info2.data = 201;//初始化

??? info1.p = new char[10];

??? std::strcpy(info1.p, "魔王");

?

??? //info2.p = nullptr;//C++的空指針

??? info2.p = new char[100];

??? std::strcpy(info2.p, "da魔王");

??? info1.set(89);

??? info2.set(98);

?

??? swap(info1, info2);

?

??? std::cout << info1.name << "?? " << info1.data << "?? " << info1.get() << std::endl;

??? std::cout << info1.p << std::endl;

??? std::cout << info2.name << "?? " << info2.data << "??? " << info2.get() << std::endl;

??? std::cout << info2.p << std::endl;

??? std::cin.get();

}

運行截圖

?

?

?

?

?

?

總結

以上是生活随笔為你收集整理的函数包装器,函数私有类处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。