C面向對象編程

C語言面向對象編程

    1. 定義一個SuperObject結構體, 里面包含最少的元素, 但是確實每一個對象都含有的, 這樣可以實現多態2. 每一個對象都是基于類的, 我們知道類都是單例對象, 所以我們創建結構體, TypeObject(類似于Java中的class), 接著每一個Object結構體中
都包含著一個對應類型的TypeObject指針, 比如"Hello world"這一個字符串對象所對應的結構體中有一個StrTypeObject示例, 這個StrTypeObject
是由我們定義的TypeObject結構體創建的, 當然萬物皆為對象, 所以還有MegaTypeObject作為TypeObject結構體的實例3. 注意: 在所有的Object結構體中, 都要SuperObject中所定義的所有的數據(主要是refcount, type_ptr(指向對應的class對象, 這里就是一
個單例的, 所以方法就是在這里的, static修飾的東西也都在這里, 多態的實現也是在這里, 因為多態主要是為要用方法服務的)), 內置的對象都是靜態的4. 用戶定義的類, 則是需要動態通過TypeObject這個結構體創建出來的, 用戶所定義的方法也要在該TypeObject中保存起來, 用于以后的調用, 其實
在Java中至于對象有關的屬性, 在這里原來的SuperObject因為包含的元素太少了不能滿足我們的需求, 我們需要在定義一個含有一個dict的BasicSuperO
bject結構體, 通過一個dict, 以"屬性名":屬性名值的形式來實現對每一個對象的屬性保存, 而方法則在TypeObject中的dict中, 也通過類似的方法存儲5. 通過以上的幾點我們知道, 在TypeObject中定義方法和屬性, 對應于Java中的static修飾的函數和屬性, 都是與class有關, 與instance無關的,
而在BasicObject中定義的則是至于instance有關的6. 在TypeObject中需要內置一些方法, 讓每一個對象都有對應的處理操作, 實現繼承可以:1. 數值處理的函數的結構體2. 序列處理的函數的結構體3. 映射處理的函數的結構體則系統每一種內置對象分別填充對應的結構體函數指針, 并也在dict中存儲, 這樣在調用時就可以統一的調用了7. 為了有個性#define BUXAPI(return_type)  return_typeBUXAPI(SuperObject *) so_dome();這樣就告訴用戶這是我們自己的API, 你們可以調用8. 需要內置的對象:int, float, string, mapping(命名空間中非常重要), list, stack, type9. 目錄結構:Include, Objects, Tools, Doc, Demo, Lib, Module10. 在面向對象中, 對象之間的操作符, 應該都轉為函數的操作11. 在Map中比較中應該調用每一個對象的equal方法, 如果類型不同則為false, 相同則比較真正比較的值, 返回一個內置的None對象12. 遇到變量的重復定義, 使用extern關鍵字, 這個時候可以使用一個宏定義#define JCAPI_DATA(datatype) extern datatype 使得表達更加的直觀 

其他

1. 在C語言中定義了一個全局變量, 如果要直接為該全局進行賦值, 那么必須要賦常量值:0, NULL, "string", 如果要賦變量的值, 需要在函數中賦值
2. 雖然這里講的是面向對象的編程但是我在這里寫的是一些技巧的東西如果有多個函數都結構相同的參數列表, 并且特別的長, 我們可以使用struct封裝參數列表, 這樣函數的參數列表就會簡明一些, 為了方便構造結構體, 我們可以通過一個宏或者函數來創建該結構體3. C語言中要想實現foreach, 可以說使用宏定義#define for_each(s) \List *tmp = s.lists;調用時for_each() {...code...}   

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/277822.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/277822.shtml
英文地址,請注明出處:http://en.pswp.cn/news/277822.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

幾道web題簡單總結

拖了好長時間,總結一下這一段時間做的幾道值得記錄一下的題目,有的沒做出來,但是學習到了新的東西 1.homebrew event loop ddctf的一道題目,學到了python eval函數的用法,首先分析題目: # -*- encoding: ut…

js進階 9-5 js如何確認form的提交和重置按鈕

js進階 9-5 js如何確認form的提交和重置按鈕 一、總結 一句話總結: 1、這個并不好做:onsubmit 里面的代碼必須返回false才能取消onsubmit方法的執行,所以,有return。注意:一般的調用肯定是沒有return的。onsubmit"…

.NET中RabbitMQ的使用

.NET中RabbitMQ的使用 概述 MQ全稱為Message Queue, 消息隊列(MQ)是一種應用程序對應用程序的通信方法。RabbitMQ是一個在AMQP基礎上完整的,可復用的企業消息系統。他遵循Mozilla Public License開源協議。AMQP(高級消息隊列協議) 是一個異步…

SQL Server死鎖診斷--同一行數據在不同索引操作下引起的死鎖

死鎖概述 對于數據庫中出現的死鎖,通俗地解釋就是:不同Session(會話)持有一部分資源,并且同時相互排他性地申請對方持有的資源,然后雙方都得不到自己想要的資源,從而造成的一種僵持的現象。當然…

python下載安裝搭建

python官網下載python運行環境(https://www.python.org/downloads/),建議下載穩定版本,不推薦使用最新版本 安裝 然后我們打開CMD,在里面輸入python,就可以直接進入進行編碼了 如果輸入python出現下面錯誤 …

35個Java 代碼性能優化總結

前言代碼優化,一個很重要的課題。可能有些人覺得沒用,一些細小的地方有什么好修改的,改與不改對于代碼的運行效率有什么影響呢?這個問題我是這么考慮的,就像大海里面的鯨魚一樣,它吃一條小蝦米有用嗎&#…

MySQL講義

1 MySQL基礎知識 瑞典MySQL AB公司開發,由SUN收購,而后SUN被甲骨文并購,目前屬于Oracle公司。 MySQL是一種關聯數據庫管理系統 由于其體積小、速度快、總體擁有成本低、MySQL軟件采用了雙授權政策,分為社區版和企業版。 …

Teams Bot App Manifest 文件解析

這篇文章我們繼續以 Hello World Bot 這個 sample 來講一下 manifest template。 實際上在 Teams app 開發的時候,有 manifest 的概念,manifest 是用來說明這個 teams app 的一些基本信息和配置信息,比如 app 的名字,app有哪些能…

[Dart] Flutter開發中的幾個常用函數

幾個Flutter開發中的常用函數 /** 返回當前時間戳 */static int currentTimeMillis() {return new DateTime.now().millisecondsSinceEpoch;}/** 復制到剪粘板 */static copyToClipboard(final String text) {if (text null) return;Clipboard.setData(new ClipboardData(text…

Cordova入門系列(三)Cordova插件調用 轉發 https://www.cnblogs.com/lishuxue/p/6018416.html...

Cordova入門系列(三)Cordova插件調用 版權聲明:本文為博主原創文章,轉載請注明出處 上一章我們介紹了cordova android項目是如何運行的,這一章我們介紹cordova的核心內容,插件的調用。演示一個例子&#xf…

clojure with postgres

主要關注訪問pg。不關心其他db 1 clojure.java.jdbc https://github.com/clojure/java.jdbchttp://clojure-doc.org/articles/ecosystem/java_jdbc/reusing_connections.html這個最廣,需要配合不同DB[org.clojure/java.jdbc "0.7.9"] [org.postgresql/pos…

lua入門

https://en.blog.nic.cz/2015/08/12/embedding-luajit-in-30-minutes-or-so/

shell腳本傳可選參數 getopts 和 getopt的方法

寫了一個shell腳本,需要向shell腳本中傳參數供腳本使用,達到的效果是傳的參數可以是可選參數 下面是一個常規化的shell腳本: echo "執行的文件名為: $0";echo "第一個參數名為: $1";echo "第二個參數名為: $2"…

Teams Tab App 代碼深入淺出 - 配置頁面

上一篇文章我們使用Teams Toolkit 來創建、運行 tab app。這篇文章我們深入來分析看一下tab app 的代碼。 先打開代碼目錄,可以看到在 src 目錄下有入口文件 index.tsx,然后在 components 目錄下有更多的一些 tsx 文件,tsx 是 typescript的一…

labelme標注的json文件數據轉成coco數據集格式(可處理目標框和實例分割)

這里主要是搬運一下能找到的 labelme標注的json文件數據轉成coco數據集格式(可處理目標框和實例分割)的代碼,以供需要時參考和提供相關幫助。 1、官方labelme實現 如下是labelme官方網址,提供了源代碼,以及相關使用方…

EpSON TM-82II驅動在POS系統上面安裝問題處理

按照品牌名稱,在網上下載的安裝包為apstmt82.rar 下面講解一下,如何的解決愛普生打印機在POS機器上面的安裝問題,這個算是一個比較奇特的故障問題,不像其它的新北冰洋(SN3C)的U80_U80II,SeNor的…

打印圖片的屬性和實現另存圖片功能以及使用numpy

上一篇我們已經學了如何讀取圖片的功能了以及和opencv的環境搭建了,今天接著來學習,哈哈哈,今天剛好五一,也沒閑著,繼續學習。 1、 首先我們來實現打印出圖片的一些屬性功能, 先來看一段代碼: 1…

Ubuntu 18.04下命令安裝VMware Tools

2019獨角獸企業重金招聘Python工程師標準>>> sudo apt-get upgrade sudo apt-get install open-vm-tools-desktop -y sudo reboot 轉載于:https://my.oschina.net/u/574036/blog/1829455

phpstorm PHP language level無法選擇

phpstorm PHP7新特性一直提示紅色波浪線,應該是沒有設置PHP 版本,但是打開PHPstorm---preference--lannguage&frameworks--PHP , 發現PHP language level 無法選擇PHP7.2 ,查看旁邊的提示信息說是同步了composer 的原因&#…

Qfile

打開方式: 1 void AddStudents::write_to_file(QString src){2 QFile file("stu.txt");3 if (!file.open(QIODevice::Append | QIODevice::Text)){4 QMessageBox::critical(this,"打開文件錯誤","確認");5 r…