C++ 静态成员函数 静态成员变量 常成员函数之前的使用
来源:互联网 发布:软件工程项目案例 编辑:程序博客网 时间:2024/06/04 19:18
之前一直都不太注意静态成员函数和常成员之前的区别,直到要用带回调函数的时候,就悲剧了.
遇到的问题:
需要在类A中跟新行情数据的map,之前设计的是行情数据每秒查询一次,这样数据多起来以后对行情服务器造成很大压力,改成选择订阅的方式来跟新本地数据,提高运行效率,缓解行情压力.订阅就需要注册回调函数.
一开始我用了单例模式的方法解决:把类内定义一个static 对象 m_gInstance,定义一个static的函数Recive_CALLBACK,注册这个函数到回调中,Recive_CALLBACK中调用m_gInstance对象来改变成员map的数据.
<span style="font-size:24px;">#include <map>struct m_struct{int code;int price;};class StaticTest{public:static StaticTest* m_gInstance;std::map<int,m_struct</span><span style="font-size:24px;">> Last_maps;static void Recive_CallBack(const m_struct& stru);StaticTest();~StaticTest();};CPP:StaticTest* m_gInstance = new StaticTest;void StaticTest::Recive_CallBack(const m_struct & stru){m_gInstance->Last_maps[stru.code] = stru;}StaticTest::StaticTest(){}StaticTest::~StaticTest(){}</span>用一个static对象来解决静态和非静态之前的交流.还是挺好用的.就是我不想用单例模式,还得初始化对象啥的;于是我想静态函数不能调用常成员变量.非静态成员都是类的,而常成员是属于对象的,对象可以千千万,类只有一个,你让静态函数去调用一个成员变量,那肯定得告诉它是调用的哪一个对象的,要不它哪知道是谁的变量啊,找不到啊.
我觉得在设计上,要用到静态函数的话,那么它应该是所有对象可以共享的一个东西,静态成员变量也应该是所有对象都共享的变量.而我遇到的问题中的行情刚好也是所有对象共享的.独一份,大家一起用,于是我就把map变成静态的,并且觉得它本来就应该是静态的,于是代码变成这样:
#include <map>struct m_struct{int code;int price;};class StaticTest{public:static std::map<int, m_struct> Last_maps;static void Recive_CallBack(const m_struct& stru);int GetLastPrice(const int code, m_struct &stru);StaticTest();~StaticTest();};CPP:#include "StaticTest.h"std::map<int, m_struct> StaticTest::Last_maps;void StaticTest::Recive_CallBack(const m_struct & stru){Last_maps[stru.code] = stru;}int StaticTest::GetLastPrice(const int code, m_struct & stru){auto iter = Last_maps.find(code);if (iter != Last_maps.end()){stru = iter->second;}else{return -1;}return 0;}StaticTest::StaticTest(){}StaticTest::~StaticTest(){}用静态成员函数和变量来更新我的数据,用常成员函数GetLastPrice来获取数据,常成员函数是可以调用静态变量和静态成员函数的,因为之前我说的一样,静态的就是类共有的.可以这么理解,静态的就是类里没啥地位的,谁都可以指唤(调用)它们,而它们只能自己直接合作(调用).静态的只能调用静态的.
以上是我的理解,有错误请指点.
0 0
- C++ 静态成员函数 静态成员变量 常成员函数之前的使用
- c++:静态成员变量和静态成员函数使用问题
- 类的 静态成员 --- 静态成员变量 、 静态成员函数
- 静态成员变量和静态成员函数的使用
- 静态成员变量成员函数
- 成员函数的静态变量
- 【C++】类的静态成员函数和静态成员变量的使用
- 静态成员变量和静态成员函数
- 静态成员函数和静态成员变量
- 静态成员变量 和 静态成员函数
- 静态成员变量和静态成员函数
- 静态成员变量和静态成员函数
- 静态成员变量与静态成员函数
- 静态成员变量 与 静态成员函数
- 静态成员变量与静态成员函数
- 静态成员变量和静态成员函数
- 静态成员变量和静态成员函数
- C++静态成员变量,静态成员函数
- 启动docker web服务时 虚拟机端口转发 外部无法访问
- angularJS
- fatal: remote origin already exists
- PHP中基本数据类型的特点
- Protobuf详解
- C++ 静态成员函数 静态成员变量 常成员函数之前的使用
- 第八周 OJ练习-4
- leetcode 290. Word Pattern
- MySQL SQL语句常用的30个优化技巧
- EventBus_Demo
- 如何用 Telemetry 测试移动 APP H5性能?
- C++生成Bmp图片底层代码
- 1024程序员节,深圳全城寻找程序员
- js数组操作(push,pop,shift,unshift,slice,splice,concat,sort)