このトピックでは、Cava でサポートされているクラスとオブジェクト、および関連機能について説明します。
概要
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;
}
}メンバー変数を定義する
次のサンプルコードは、DOUBLE 型の PI という名前のメンバー変数を定義する方法の例を示しています。
class Example {
double PI; // <== メンバー変数の定義
Example() {
PI = 3.1415926;
}
}メンバー変数を定義するときに、変数の初期値を指定することはできません。 コンストラクターを使用してメンバー変数を初期化する必要があります。
class Example {
double PI = 3.1415926; // メンバー変数を定義するときに、変数を初期化することはできません。
}コンストラクターを定義する
コンストラクターは、Cava の特別なメンバー関数です。 コンストラクターには次の制限があります。
コンストラクターの名前とクラス名は同じである必要があります。
コンストラクターに戻り値はありません。 出力パラメーターを指定することはできません。
コンストラクターは、関連オブジェクトが作成された後に自動的に呼び出されます。 コンストラクターのコマンドは、オブジェクトを初期化するために実行されます。 Cava では、複数のコンストラクターを定義できます。 new コマンドの指定された構文によって、オブジェクトの作成と初期化に使用されるコンストラクターが決まります。 次のサンプルコードは、main ハンドラ関数を使用して 2 つのオブジェクトを作成する方法の例を示しています。 最初のオブジェクトはコンストラクター A を使用して初期化されます。 初期化後、PI メンバー変数の値は 3.1415926 になります。 2 番目のオブジェクトはコンストラクター 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 はクラス継承をサポートしていません。