我們說封裝,其實不單只是將數據和操作數據的函數封裝成類類型,也可以是函數封裝數據和代碼、結構體封裝數組、結構體模仿“面向對象”思想封裝函數指針、結構體指針和結構體變量。
1 結構體封裝數組
#include <iostream>
using namespace std;
struct _arrInStruct{
....char arr[7];
}a,b={"abcdef"};
int f(struct _arrInStruct arr) // 如果是裸數組,數組名會兌化為指針
{
....return sizeof(arr);//如果是裸數組,只能返回指針的長度
}
int main()
{
....a=b; // 數組不能整體賦值,因為數組名已兌化為指針,結構體可以
....cout<
....system("pause");
....return 0;
}
// size of abcdef is 7
2 結構體模仿面向對象思維實現封裝、私有化、繼承和多態
2.1 結構體封裝函數指針:實現面向對象的封裝概念
struct _Data;
typedef void (*process)(struct _Data* pData);
typedef struct _Data
{
....int value;
....process pProcess;
}Data;
2.2 結構體封裝結構體指針:實現面向對象的私有概念
typedef struct _data
{
....int m_data;
} * pdata;
typedef struct _Child
{
....pdata pd;
....int data_child;
}Child;
2.3 結構體封裝結構體變量:實現面向對象的繼承概念
typedef struct _parent
{
....int data_parent;
}Parent;
typedef struct _Child
{
....struct _parent parent;
....int data_child;
}Child;
2.4 結構體封裝函數指針:實現面向對象的多態概念
typedef struct _Play
{
....void* pData;
....void (*start_play)(struct _Play* pPlay);
}Play;
-End-
閱讀更多 小智雅匯 的文章