C语言面向对象
創作人QQ:851301776,郵箱:lfr890207@163.com, 歡迎大家一起技術交流,本博客主要是自己學習的心得體會,只為每天進步一點點!
個人座右銘:
1.沒有橫空出世,只要厚積一定發。
2.你可以學歷不高,你可以不上學,但你不能不學習
一、核心點
????????做C語言和C++的都知道,C語言面向過程,C++面向對象。所以C語言要實現面向對象,核心組成是:?
????????(1)屬性:單個物體的基本特性
????????(2)方法:單個物體操作類的
????????舉例:以一個員工為例,員工的姓名、年齡、籍貫、工資、職位等為屬性。而為了增加一個員工,新增一些年齡修改或者獲取等信息的為方法。
??????? 核心:方法是用來對屬性進行操作的函數,而屬性是一個對象的基本信息
二、面向對象概念
????????把數據及對數據的操作方法放在一起,作為一個相互依存的整體——對象。對同類對象抽象出其共性,形成類。類中的大多數數據,只能用本類的方法進行處理。類通過一個簡單的外部接口與外界發生關系,對象與對象之間通過消息進行通信。程序流程由用戶在使用中決定。對象即為人對各種具體物體抽象后的一個概念,人們每天都要接觸各種各樣的對象,如手機就是一個對象。
三、屬性和方法封裝(以學生對象)
1.屬性
struct student {const void *_; //int age;char name[NAME_LENGTH]; };? 2.方法
struct func {size_t size;void* (*ctor)(void *self, va_list *params);void* (*dtor)(void *self);void (*set_age)(int age);int (*get_age)(void);void (*set_name)(char *name);char (*get_name)(void);};3.抽象
??????? 抽象結構體主要是為了銜接屬性和方法的
struct AbstractClass {size_t size;void* (*ctor)(void *self, va_list *params);void* (*dtor)(void *self); };四、分配和釋放
1.分配步驟如下
(1)傳遞參數為AbstractClass。
(2)分配AbstractClass中的size大小內存,而size是屬性結構體的大小。
(3)把屬性中的void *_指向AbstractClass。
(4)使用指針遍歷棧區的參數列表(va_list)
2.釋放步驟
(1)判斷參數是否為空和對應的釋放函數
五、方法中的函數實現
(1)方法函數實現
(2)對應結構體
六、參數個數未知(即參數個數可變)時獲取函數中的參數
1.頭文件
????????stdarg.h
2.變量va_list
????????這是一個適用于 va_start()、va_arg() 和 va_end() 這三個宏存儲信息的類型。
3.宏void va_start(va_list ap, last_arg)
?
????????這個宏初始化 ap 變量,它與 va_arg 和 va_end 宏是一起使用的。last_arg 是最后一個傳遞給函數的已知的固定參數,即省略號之前的參數。
4.宏void?va_arg(va_list ap, type)
????????這個宏檢索函數參數列表中類型為 type 的下一個參數
5.宏void va_end(va_list ap)
????????這個宏允許使用了 va_start 宏的帶有可變參數的函數返回。如果在從函數返回之前沒有調用 va_end,則結果為未定義。
七、掩碼
??????? 不上
總結
- 上一篇: IPv6- Windows Server
- 下一篇: C# PictureBox设置图片