CBrother 类

类和对象

类是一个模板,它描述一类对象的行为和状态。
对象 对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。

Cbrother中的类

类可以看成是创建CBrother对象的模板。一个类可以包含以下内容

成员变量 成员变量是定义在类中,方法体之外的变量,这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。
成员函数 成员函数是类的方法,每个实例化都有这些方法
构造函数 构造函数是一个和类命相同函数,但不是必须要写的。如果定义了构造函数,会在实例化时调用一次
  1. class people
  2. {
  3. var _Name;
  4. var _Age;
  5. var _Nation;
  6. var _Sex;
  7. function people(name,age,nation)
  8. {
  9. _Name = name;
  10. _Age = age;
  11. _Nation = nation;
  12. }
  13. function speak()
  14. {
  15. var speakvalue = "hello! my name is " + _Name + ". i'm from " + _Nation + ". i'm " + _Age;
  16. if(_Sex == 0)
  17. {
  18. speakvalue += ". i'm a girl.";
  19. }
  20. else
  21. {
  22. speakvalue += ". i'm a boy.";
  23. }
  24. print speakvalue;
  25. }
  26. }

创建对象

使用关键字new来创建一个对象,对象通过(.)来访问成员变量和成员方法

  1. function main(parm)
  2. {
  3. var tonyObj = new people("tony",18,"england");
  4. tonyObj._Sex = 1;
  5. var hanmeimeiObj = new people("hanmeimei",18,"china");
  6. hanmeimeiObj._Sex = 0;
  7. tonyObj.speak();
  8. hanmeimeiObj.speak();
  9. }

结果:

  1. hello! my name is tony. i'm from england. i'm 18. i'm a boy.
  2. hello! my name is hanmeimei. i'm from china. i'm 18. i'm a girl.

类的继承

继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

  1. class 父类
  2. {
  3. }
  4. class 子类 extends 父类
  5. {
  6. }

例子:

  1. class peopleEx extends people
  2. {
  3. var _Hobby;
  4. function peopleEx(name,age,nation,sex,hobby)
  5. {
  6. super(name,age,nation); //子类通过super关键字访问父类构造函数
  7. _Sex = sex;
  8. _Hobby = hobby;
  9. }
  10. function speak() //重载了父类的方法
  11. {
  12. super.speak(); //调用父类同名方法
  13. print "I like " + _Hobby;
  14. }
  15. }
  16. function main(parm)
  17. {
  18. var tonyObj = new peopleEx("tony",18,"england",1,"football");
  19. var hanmeimeiObj = new peopleEx("hanmeimei",18,"china",0,"reading");
  20. tonyObj.speak();
  21. hanmeimeiObj.speak();
  22. }

结果:

  1. hello! my name is tony. i'm from england. i'm 18. i'm a boy.
  2. I like football
  3. hello! my name is hanmeimei. i'm from china. i'm 18. i'm a girl.
  4. I like reading

虚函数

在普通的函数前面加上virtual关键字,就声明了一个虚函数。虚函数可以不实现,就称为纯虚函数。有纯虚函数的类为虚类,不能被构造。

例子:

  1. class peoplebase
  2. {
  3. virtual function getName();
  4. virtual function getSex()
  5. {
  6. return 1;
  7. }
  8. virtual function getNation()
  9. {
  10. return "china";
  11. }
  12. virtual function getAge();
  13. virtual function getHobby();
  14. function speak()
  15. {
  16. var speakvalue = "hello! my name is " + getName() + ". i from1 " + getNation() + ". i'm " + getAge();
  17. if(getSex() == 0)
  18. {
  19. speakvalue += ". i'm a girl.";
  20. }
  21. else
  22. {
  23. speakvalue += ". i'm a boy.";
  24. }
  25. print speakvalue;
  26. print "I like " + getHobby();
  27. }
  28. }
  29. class peopleTony extends peoplebase
  30. {
  31. virtual function getName()
  32. {
  33. return "tony";
  34. }
  35. virtual function getNation()
  36. {
  37. return "english";
  38. }
  39. virtual function getAge()
  40. {
  41. return 18;
  42. }
  43. virtual function getHobby()
  44. {
  45. return "football";
  46. }
  47. }
  48. class peopleHanmeimei extends peoplebase
  49. {
  50. virtual function getName()
  51. {
  52. return "hanmeimei";
  53. }
  54. virtual function getSex()
  55. {
  56. return 0;
  57. }
  58. virtual function getNation()
  59. {
  60. return "china";
  61. }
  62. virtual function getAge()
  63. {
  64. return 18;
  65. }
  66. virtual function getHobby()
  67. {
  68. return "reading";
  69. }
  70. }
  71. function main(parm)
  72. {
  73. var tonyObj2 = new peopleTony();
  74. var hanmeimeiObj2 = new peopleHanmeimei();
  75. tonyObj2.speak();
  76. hanmeimeiObj2.speak();
  77. }

结果:

  1. hello! my name is tony. i from1 english. i'm 18. i'm a boy.
  2. I like football
  3. hello! my name is hanmeimei. i from1 china. i'm 18. i'm a girl.
  4. I like reading