簡介
cava語言支援類的定義和對象的使用。主要支援物件導向編程中的以下概念:
封裝
抽象
類
對象
執行個體
方法
cava中物件導向模組的文法設計,與Java和C#語言基本一致。
樣本
定義一個名為 Example
的類,在入口函數中建立相應的對象 example
,並訪問其身上的成員 PI
:
class Example { // <==
double PI;
Example() {
PI = 3.1415926;
}
static int main() {
Example example = new Example();
double a = example.PI; //a的值為3.1415926
return 0;
}
}
功能介紹
類的定義
類的定義由 class
關鍵字開始,內部主要包含以下操作:
定義成員變數:定義承載對象中資料的變數
定義建構函式:對象建立完畢後負責對象資料的初始化
定義成員函數:定義函數作為訪問對象的方法
定義類函數:定義類層級函數,被所有對象共用,並可以直接通過類名訪問
class Example { // 定義類Example
public double PI; // 定義成員變數
Example() { // 定義建構函式
PI = 3.1415926;
}
double getPI() { // 定義成員函數
return PI;
}
static int main() {
Example example = new Example();
double a = example.getPI(); //a的值為3.1415926
return 0;
}
}
建立對象
當類定義完畢後,即可開始使用類來建立對象。建立對象主要包含以下三步:
聲明:聲明一個變數,並指定變數對應的類型
執行個體化:結合內建關鍵字
new
來產生一個新的對象初始化:
new
關鍵字後緊跟的函數確定了對象建立後使用的建構函式,建構函式承擔了對象資料的初始化任務
以下是一個例子,注意在 main
函數的第一行,我們使用剛剛定義的 Example
類型建立了一個對象,並將其儲存在一個名為 example
的變數中。對象建立完畢後,可以使用 example
變數訪問對象上的資料成員。
class Example {
double PI;
Example() {
PI = 3.1415926;
}
static int main() {
Example example = new Example();
return 0;
}
}
成員變數
以下例子中定義了一個名為 PI
、類型是 double
的成員變數:
class Example {
double PI; // <==
Example() {
PI = 3.1415926;
}
}
注意:暫不支援在成員變數定義時指定初始化值,成員變數初始化請在建構函式中完成。
class Example {
double PI = 3.1415926; //目前不支援在定義成員變數時進行初始化
}
建構函式
在cava中,建構函式是一種特殊的成員函數。建構函式有以下兩個要求:
建構函式的名稱必須和類名一致
建構函式沒有傳回值,且不可以指定傳回值
建構函式在對象建立後會自動被調用,執行建構函式內的指令完成對象資料的初始化。cava中支援定義多個建構函式,每次物件建構會根據 new
後語句的形式,選擇相應建構函式進行初始化。在以下例子中,我們在入口函數 main
中構造了兩個對象,其中第一個對象使用建構函式A初始化,初始化完畢後,成員 PI
的值為 3.1415926
;第二個函數使用建構函式B初始化,初始化完畢後,成員 PI
的值為使用者傳入的 3.14
class Example {
public double PI;
Example() { // <== A
this.PI = 3.1415926;
}
Example(double customPI) { // <== B
this.PI = customPI;
}
double getPI() {
return PI;
}
static int main() {
Example example1 = new Example(); // 使用建構函式A進行初始化
double a = example1.getPI();
Example example2 = new Example(3.14); // 使用建構函式B進行初始化
double b = example2.getPI()
return 0;
}
}
註:建構函式支援重載
成員函數
成員函數提供了對成員變數操作的封裝,對象的使用者通過調用成員函數,來讀取和修改對象的成員變數。在成員函數的定義中,可以直接存取成員變數。如果函數範圍記憶體在另一個同名變數,則通過該變數名訪問時會優先使用函數範圍內的變數。此類情況可以通過在變數前添加 this
首碼,來限定使用成員變數。
class Example {
public double PI;
Example() {
this.PI = 3.1415926;
}
void getPI() {
return PI;
}
static int main() {
Example example = new Example();
double a = example.getPI();
return 0;
}
}
註:成員函數支援函數重載。在類中可以定義多個同名成員函數,編譯器會在函數的調用處,根據調用參數的類型和個數選擇出最匹配的函數,執行調用。
類函數
類函數是屬於類的函數,且被所有該類的成員共用。類函數通過在函數定義中增加 static
修飾符建立,並可以直接通過類來訪問,無需建立相應對象,而成員函數必須通過對象訪問。
class Example {
static double getPI() { // <==
return 3.1415926;
};
static int main() {
double a = Example.getPI();
return 0;
}
}
繼承和多態
cava暫時不支援類的繼承。