全部产品
云市场

Cava 类与对象

更新时间:2020-04-09 10:52:35

简介

cava语言支持类的定义和对象的使用。主要支持面向对象编程中的以下概念:

  • 封装
  • 抽象
  • 对象
  • 实例
  • 方法

cava中面向对象模块的语法设计,与Java和C#语言基本一致。

示例

定义一个名为 Example 的类,在入口函数中创建相应的对象 example ,并访问其身上的成员 PI

  1. class Example { // <==
  2. double PI;
  3. Example() {
  4. PI = 3.1415926;
  5. }
  6. static int main() {
  7. Example example = new Example();
  8. double a = example.PI; //a的值为3.1415926
  9. return 0;
  10. }
  11. }

功能介绍

类的定义


类的定义由 class 关键字开始,内部主要包含以下操作:

  1. class Example { // 定义类Example
  2. public double PI; // 定义成员变量
  3. Example() { // 定义构造函数
  4. PI = 3.1415926;
  5. }
  6. double getPI() { // 定义成员函数
  7. return PI;
  8. }
  9. static int main() {
  10. Example example = new Example();
  11. double a = example.getPI(); //a的值为3.1415926
  12. return 0;
  13. }
  14. }

创建对象


当类定义完毕后,即可开始使用类来创建对象。创建对象主要包含以下三步:

  • 声明:声明一个变量,并指定变量对应的类型
  • 实例化:结合内置关键字 new 来产生一个新的对象
  • 初始化: new 关键字后紧跟的函数确定了对象创建后使用的构造函数,构造函数承担了对象数据的初始化任务


以下是一个例子,注意在 main 函数的第一行,我们使用刚刚定义的 Example 类型创建了一个对象,并将其保存在一个名为 example 的变量中。对象创建完毕后,可以使用 example 变量访问对象上的数据成员。

  1. class Example {
  2. double PI;
  3. Example() {
  4. PI = 3.1415926;
  5. }
  6. static int main() {
  7. Example example = new Example();
  8. return 0;
  9. }
  10. }

成员变量


以下例子中定义了一个名为 PI 、类型是 double 的成员变量:

  1. class Example {
  2. double PI; // <==
  3. Example() {
  4. PI = 3.1415926;
  5. }
  6. }


注意:暂不支持在成员变量定义时指定初始化值,成员变量初始化请在构造函数中完成。

  1. class Example {
  2. double PI = 3.1415926; //目前不支持在定义成员变量时进行初始化
  3. }

构造函数


在cava中,构造函数是一种特殊的成员函数。构造函数有以下两个要求:

  • 构造函数的名称必须和类名一致
  • 构造函数没有返回值,且不可以指定返回值


构造函数在对象创建后会自动被调用,执行构造函数内的指令完成对象数据的初始化。cava中支持定义多个构造函数,每次对象构造会根据 new 后语句的形式,选择相应构造函数进行初始化。
在以下例子中,我们在入口函数 main 中构造了两个对象,其中第一个对象使用构造函数A初始化,初始化完毕后,成员 PI 的值为 3.1415926 ;第二个函数使用构造函数B初始化,初始化完毕后,成员 PI 的值为用户传入的 3.14

  1. class Example {
  2. public double PI;
  3. Example() { // <== A
  4. this.PI = 3.1415926;
  5. }
  6. Example(double customPI) { // <== B
  7. this.PI = customPI;
  8. }
  9. double getPI() {
  10. return PI;
  11. }
  12. static int main() {
  13. Example example1 = new Example(); // 使用构造函数A进行初始化
  14. double a = example1.getPI();
  15. Example example2 = new Example(3.14); // 使用构造函数B进行初始化
  16. double b = example2.getPI()
  17. return 0;
  18. }
  19. }

注:构造函数支持重载

成员函数


成员函数提供了对成员变量操作的封装,对象的使用者通过调用成员函数,来读取和修改对象的成员变量。
在成员函数的定义中,可以直接访问成员变量。如果函数作用域内存在另一个同名变量,则通过该变量名访问时会优先使用函数作用域内的变量。此类情况可以通过在变量前添加 this 前缀,来限定使用成员变量。

  1. class Example {
  2. public double PI;
  3. Example() {
  4. this.PI = 3.1415926;
  5. }
  6. void getPI() {
  7. return PI;
  8. }
  9. static int main() {
  10. Example example = new Example();
  11. double a = example.getPI();
  12. return 0;
  13. }
  14. }


注:成员函数支持函数重载。在类中可以定义多个同名成员函数,编译器会在函数的调用处,根据调用参数的类型和个数选择出最匹配的函数,执行调用。

类函数

类函数是属于类的函数,且被所有该类的成员共享。类函数通过在函数定义中增加 static 修饰符创建,并可以直接通过类来访问,无需创建相应对象,而成员函数必须通过对象访问。

  1. class Example {
  2. static double getPI() { // <==
  3. return 3.1415926;
  4. };
  5. static int main() {
  6. double a = Example.getPI();
  7. return 0;
  8. }
  9. }

继承和多态


cava暂时不支持类的继承。