華為倉頡語言初識:結構體struct和類class的異同

前言

華為倉頡語言是鴻蒙原生應用的一種新的編程語言,采用面向對象的編程思想,為開發者帶來新的開發體驗。不僅可以和 ArkTs 相互調用,更能提升應用程序的性能,更重要的是倉頡語言的特點結合了 java 和 C 的特點。對開發者來說比較容易上手學習,本篇文章主要是詳細介紹倉頡語言中的結構體 struct 和類 class 的區別,建議點贊收藏!

結構體 Struct

  1. 倉頡中的結構體以 strcut 作為開頭,后面跟著結構體的名稱,并以花括號作為主體部分,struct 中可以定義一系列成員變量,成員屬性,構造函數等。
struct Person {let name :Stringlet age:Int64pubilc init(name:String,age:Int64){this.name = namethis.age = age}public func speak(){println("Hello World")}
}
  1. 從代碼結構上來看,struct 整體結構與 java 中的類差不多,init 表示的函數為普通構造函數,除此之外 struct 還支持主構造函數。可以直接將成員屬性定義在主構造函數中。
struct Person {pubilc Person(let name:String,let age:Int64){}public func speak(){println("Hello World")}
}
  1. 主構造函數的函數名稱和 struct 名稱一樣。同時可以在主構造函數的參數列表中定義 struct 的成員變量。
  2. struct 的成員訪問修飾符除了常見的 public,protected,private 之外,還新增了一個 internal 修飾符,表示僅當前包季子包可以訪問。這就意味著使用導包的方式引用有 internal 修飾的成員變量,無法訪問該變量。

類 class

  1. 倉頡中的類和 Java 中的類差不多,學習起來比較簡單,都是以 class 關鍵字定義的。
class Person {let name :Stringlet age:Int64pubilc init(name:String,age:Int64){this.name = namethis.age = age}public func speak(){println("Hello World")}
}
  1. class 類支持單繼承,多實現的特點,使用 open 修飾的類才可以被繼承。同時也支持使用abstract 修飾為抽象類,繼承使用<:符號表示。
public open class Person {let name :Stringlet age:Int64pubilc init(name:String,age:Int64){this.name = namethis.age = age}public func speak(){println("Hello World")}
}
class Student <:Person{}
  1. class 類支持普通構造函數的重載,有且只有一個靜態初始化器,這點和 struct 完全相同。
  2. class 類同樣支持重寫父類的方法。
public open class Person {let name :Stringlet age:Int64pubilc init(name:String,age:Int64){this.name = namethis.age = age}public func speak(){println("Hello World")}
}
class Student <:Person{public override func speak(){println("Hello 倉頡")}}
  1. class 類支持主構造函數。
  2. 抽象類還可以被 sealed 修飾,表示被修飾的類定義只能在本定義所在的包內被其他類繼承。

不同點

  • 結構體 struct 不支持繼承,也不能被定義為抽象,而 class 類可以。
  • 結構體的實例對象在賦值給另一個對象時,表示值傳遞而并不是像 class 類的引用傳遞。

總結

倉頡中的結構體struct和 class 類有很多相同之處,開發者需要注意使用場景以及兩者之間的異同之處。特別需要注意結構體 struct 的實例賦值給另一個實例對象后,相當于實例對象的拷貝,兩者之間的內存地址并不相同,不同的操作兩者之間并不會互相影響,而 class 類和 java 中的類一樣,都是表示引用傳遞,擁有相同的內存地址。

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

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

相關文章

電池預測 | 第28講 基于CNN-GRU的鋰電池剩余壽命預測

電池預測 | 第28講 基于CNN-GRU的鋰電池剩余壽命預測 目錄 電池預測 | 第28講 基于CNN-GRU的鋰電池剩余壽命預測預測效果基本描述程序設計參考資料 預測效果 基本描述 電池預測 | 第28講 基于CNN-GRU的鋰電池剩余壽命預測 運行環境Matlab2023b及以上&#xff0c;鋰電池剩余壽…

在 Ubuntu 24.04 LTS 上 Docker 部署 DB-GPT

一、DB-GPT 簡介 DB-GPT 是一個開源的AI原生數據應用開發框架(AI Native Data App Development framework with AWEL(Agentic Workflow Expression Language) and Agents)。目的是構建大模型領域的基礎設施&#xff0c;通過開發多模型管理(SMMF)、Text2SQL效果優化、RAG框架以及…

早停策略和模型權重的保存

知識點回顧&#xff1a; 過擬合的判斷&#xff1a;測試集和訓練集同步打印指標模型的保存和加載 僅保存權重保存權重和模型保存全部信息checkpoint&#xff0c;還包含訓練狀態 早停策略 作業&#xff1a;對信貸數據集訓練后保存權重&#xff0c;加載權重后繼續訓練50輪&#xf…

DeepSpeed-Ulysses:支持極長序列 Transformer 模型訓練的系統優化方法

DeepSpeed-Ulysses&#xff1a;支持極長序列 Transformer 模型訓練的系統優化方法 flyfish 名字 Ulysses “Ulysses” 和 “奧德修斯&#xff08;Odysseus&#xff09;” 指的是同一人物&#xff0c;“Ulysses” 是 “Odysseus” 的拉丁化版本 《尤利西斯》&#xff08;詹姆…

Redis-基礎-總結

一、概述 Remote Dictionary Server(遠程字典服務)是完全開源的&#xff0c;使用ANSIC語言編寫遵守BSD協議&#xff0c;是一個高性能的Key-Value數據庫提供了豐富的數據結構&#xff0c;例如String、Hash、List、Set、sortedset等等。數據是存在內存中的&#xff0c;同時Redis…

尚硅谷redis7 28-32 redis持久化之理論介紹

28redis持久化之理論介紹 redis持久化&#xff1a;redis如何將內存數據寫入磁盤中 為什么需要持久化&#xff1f; 內存數據一斷電就會消失&#xff0c;那么所有的請求都會打到數據庫中。因此讓redis中的數據長期持有&#xff0c;不管是重啟、故障、恢復、宕機&#xff0c;還…

JS逆向【抖查查】逆向分析 | sign | secret簽名驗證

1.目標 目標網址&#xff1a;https://www.douchacha.com/bloggerRankingRise 切換日期出現目標請求 import requests import jsonheaders {"accept": "application/json, text/plain, */*","accept-language": "zh-CN,zh;q0.9","…

【數據倉庫面試題合集④】SQL 性能調優:面試高頻場景 + 調優策略解析

隨著業務數據規模的持續增長,SQL 查詢的執行效率直接影響到數據平臺的穩定性與數據產出效率。因此,在數據倉庫類崗位的面試中,SQL 性能調優常被作為重點考察內容。 本篇將圍繞常見 SQL 調優問題,結合實際經驗,整理出高頻面試題與答題參考,助你在面試中游刃有余。 ?? 高…

python打卡訓練營打卡記錄day37

知識點回顧&#xff1a; 過擬合的判斷&#xff1a;測試集和訓練集同步打印指標模型的保存和加載 僅保存權重保存權重和模型保存全部信息checkpoint&#xff0c;還包含訓練狀態 早停策略 作業&#xff1a;對信貸數據集訓練后保存權重&#xff0c;加載權重后繼續訓練50輪&#xf…

卷積神經網絡(CNN)深度講解

卷積神經網絡&#xff08;CNN&#xff09; 本篇博客參考自大佬的開源書籍&#xff0c;幫助大家從頭開始學習卷積神經網絡&#xff0c;謝謝各位的支持了&#xff0c;在此期待各位能與我共同進步? 卷積神經網絡&#xff08;CNN&#xff09;是一種特殊的深度學習網絡結構&#x…

深度體驗:海螺 AI,開啟智能創作新時代

人工智能 AI 工具如雨后春筍般涌現&#xff0c;而海螺 AI 以其獨特的魅力與卓越的性能&#xff0c;迅速在眾多產品中嶄露頭角&#xff0c;成為了無數創作者、辦公族以及各行業人士的得力助手。近期&#xff0c;我對海螺 AI 進行了深入的使用體驗&#xff0c;接下來就為大家詳細…

哈希表day5

242 有效的字母異位詞 思路就是轉為ASCII碼&#xff0c;然后用一個數組記錄26位字母出現的次數 #include <string> class Solution{ public:bool isAnagram(string s,string t){int record[26]{0};for (int i0;i<s.size();i){record[s[i]-a];}for (int i0;i<t.si…

【Python數據庫全棧指南】從SQL到ORM深度實踐

目錄 &#x1f31f; 前言&#x1f3d7;? 技術背景與價值&#x1fa79; 當前技術痛點&#x1f6e0;? 解決方案概述&#x1f465; 目標讀者說明 &#x1f9e0; 一、技術原理剖析&#x1f4ca; 核心概念圖解&#x1f4a1; 核心作用講解&#x1f527; 關鍵技術模塊說明?? 技術選…

Android磁盤占用優化全解析:從監控到治理的存儲效率革命

引言 隨著移動應用功能的復雜化&#xff0c;磁盤占用問題日益突出。據統計&#xff0c;國內頭部應用的平均安裝包大小已超100MB&#xff0c;運行時緩存、日志、圖片等數據更可能使磁盤占用突破GB級。過度的磁盤消耗不僅影響用戶設備空間&#xff0c;還可能觸發系統的“應用數據…

AJAX-讓數據活起來(一):入門

目錄 一、AJAX概念和axios使用 1.1 什么是AJAX ? 1.2 怎么用AJAX ? 1.3 axios使用 二、認識URL 2.1 什么是URL? 2.2 URL的組成 組成 協議 域名 資源路徑 獲取-新聞列表 三、URL查詢參數 URL查詢參數 axios - 查詢參數 四、常用請求方法和數據提交 常用請求…

【C++篇】list模擬實現

實現接口&#xff1a; list的無參構造、n個val構造、拷貝構造 operator重載 實現迭代器 push_back() push_front() erase() insert() 頭尾刪 #pragma once #include<iostream> #include<assert.h> using namespace std;namespace liu {//定義list節點temp…

Go 語言范圍循環變量重用問題與 VSCode 調試解決方法

文章目錄 問題描述問題原因1. Go 1.21 及更早版本的范圍循環行為2. Go 1.22 的改進3. VSCode 調試中的問題4. 命令行 dlv debug 的正確輸出 三種解決方法1. 啟用 Go 模塊2. 優化 VSCode 調試配置3. 修改代碼以確保兼容性4. 清理緩存5. 驗證環境 驗證結果結論 在 Go 編程中&…

快速創建 Vue 3 項目

安裝 Node.js 和 Vue CL 安裝 Node.js&#xff1a;訪問 https://nodejs.org/ 下載并安裝 LTS 版本。 安裝完后&#xff0c;在終端檢查版本&#xff1a; node -v npm -v安裝 Vue CLI&#xff08;全局&#xff09;&#xff1a; npm install -g vue/cli創建 Vue 3 項目 vue cr…

java學習日志——Spring Security介紹

使用Spring Security要重寫UserDetailsService的loadUserByUsername方法&#xff08;相當于自定了認證邏輯&#xff09;

【C++進階篇】初識哈希

哈希表深度剖析&#xff1a;原理、沖突解決與C容器實戰 一. 哈希1.1 哈希概念1.2 哈希思想1.3 常見的哈希函數1.3.1 直接定址法1.3.2 除留余數法1.3.3 乘法散列法&#xff08;了解&#xff09;1.3.4 平方取中法&#xff08;了解&#xff09; 1.4 哈希沖突1.4.1 沖突原因1.4.2 解…