MFC 动态数组CArray类使用说明实例

CArray<CProductPara,CProductPara> m_allPara 到底是什么?

CArray = MFC 动态数组

相当于 自动变长的数组

你可以无限添加型号,不用管大小

自带:添加、删除、获取数量、按下标取数据

尖括号里两个参数是什么意思?

CArray<【元素类型】, 【传递类型】>

第一个 CProductPara:数组里存的是 产品参数结构体

第二个 CProductPara:函数传参时,按 值传递

m_allPara[0] → 第1个型号参数

m_allPara[1] → 第2个型号参数

m_allPara[2] → 第3个型号参数

...

标准可保存结构体模板

cpp 复制代码
class CProductPara
{
public:
    union
    {
        struct
        {
            // ===== 固定长度字符串 =====
            char m_strTypeName[24];
            char m_strBrand[24];

            // ===== 整数 =====
            int  m_nValue;
            long m_lValue;
            BYTE m_byte;

            // ===== 浮点数 =====
            float m_fValue;
            double m_dValue;

            // ===== 布尔 =====
            bool m_bCheck;
            BOOL m_bEnable;

        };

        char len[1024]; // 固定总长
    };
};

void CSEAL_PRESSUREApp::SaveTypeCFG()
{
	
	CFile file;
	CProductPara paraBuf;
	file.Open(m_strTypeCFGFileName,CFile::modeCreate|CFile::modeWrite);
	for(int i = 0 ; i < theApp.m_allPara.GetSize() ; i ++)
	{
		paraBuf = m_allPara[i];
		file.Write(&paraBuf,sizeof(m_allPara[i]));
	}
	file.Close();
}

CString // ❌ 绝对不能用!

string // ❌ 绝对不能用!

char* // ❌ 指针!不行!

int* // ❌ 指针!不行!

CArray // ❌ 不能嵌套!

CDialog // ❌ 窗口类 不行!

CObject // ❌ MFC对象 不行!

vector<> // ❌ 动态数组 不行!

因为它们不是固定大小、带内存指针、无法直接二进制保存:

能直接用 file.Write() 保存进二进制文件的只有:纯值类型 + 固定长度数组

任何带 "动态内存"、"指针"、"CString" 的都不能用!

结构体里安全添加的常用类型

cpp 复制代码
BYTE        m_byte;      // 无符号单字节 0~255
WORD        m_word;      // 无符号双字节 0~65535
DWORD       m_dword;     // 无符号4字节
short       m_short;     // 短整型
long        m_long;      // 长整型
unsigned int m_uint;     // 无符号整数
float // 单精度浮点数
int
double
bool
BOOL // MFC的布尔(TRUE/FALSE)
char[固定长度]

char len[1024]; 占用的字节数

char len[1] = 1 字节

1 个 char = 1 字节

1024 个 char = 1024 字节

bool = 1 字节

int = 4 字节

WORD = 2 字节

DWORD = 4 字节

float = 4 字节

double = 8 字节

相关推荐
Ring__Rain18 小时前
nnpp处理,线程
数据结构·c++·算法
Cx330❀18 小时前
【Linux网络】从以太网碰撞到 Socket 套接字与网络字节序的深度解析
xml·linux·运维·服务器·开发语言·网络·c++
蜡笔小马18 小时前
15.C++设计模式-观察者模式
c++·观察者模式·设计模式
拂拉氏20 小时前
【项目分享-知识讲解】C++标准库string类的模拟实现+KMP算法讲解+哈希思想了解
开发语言·c++·算法·kmp算法·哈希·string类
枕星而眠20 小时前
C++ 类与对象核心知识点及面试高频题详解
开发语言·c++·面试
小poop1 天前
string 类从入门到深入
c++
眠りたいです1 天前
现代C++:C++14中的新语言特性和库特性
c语言·开发语言·c++
浅念-1 天前
LeetCode 回溯算法题——综合练习
数据结构·c++·算法·leetcode·职场和发展·深度优先·dfs
楼田莉子1 天前
C++17新特性:__had_include/属性/求值顺序规则
开发语言·c++·后端