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

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

CArray = MFC 动态数组

相当于 自动变长的数组

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

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

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

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

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

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

m_allPara0 → 第1个型号参数

m_allPara1 → 第2个型号参数

m_allPara2 → 第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 len1024; 占用的字节数

char len1 = 1 字节

1 个 char = 1 字节

1024 个 char = 1024 字节

bool = 1 字节

int = 4 字节

WORD = 2 字节

DWORD = 4 字节

float = 4 字节

double = 8 字节

相关推荐
千谦阙听31 分钟前
C++类和对象(中):默认成员函数、构造与析构、拷贝构造、运算符重载
开发语言·c++·学习
weixin_307779131 小时前
一维无粘 Burgers 方程的激波形成问题:MacCormack 格式求解
c++·算法·matlab
HugoStudio_SWAN1 小时前
洛谷 B4500 / B4449 / B3843 凯撒密码、密码强度与密码合规——加密与安全的三道门
c++·学习·程序人生·算法·安全
雾里看山2 小时前
源码目录、构建目录与 out-of-source build
c++·软件构建·cmake
渡我白衣4 小时前
并查集:基础认识与模拟实现
android·java·javascript·数据结构·c++·算法·并查集
如意猴4 小时前
【C++】001--C++入门(1)
开发语言·c++
hetao17338374 小时前
2026-09-01~09-04 hetao1733837 的刷题记录
c++·算法
HugoStudio_SWAN7 小时前
洛谷 P1420 / P1179 / B4262 最长连号、数字统计与词频统计——统计的三种面孔
c++·学习·程序人生·算法
raindayinrain8 小时前
c++并发
c++
j7~8 小时前
【C++】智能指针的使用及其原理--详解
c++·c++11·内存泄漏·智能指针·raii·boost智能指针