import stdio import t, c # ============================================================ # 继承测试:字段展平 + vtable 继承 + 方法覆盖 # ============================================================ # ============================================================ # 基类 Animal(有虚方法) # ============================================================ @t.CVTable class Animal: name: t.CInt def __init__(self, n: t.CInt): self.name = n def GetName(self) -> t.CInt: return self.name def Speak(self) -> t.CInt: return 0 # ============================================================ # 子类 Dog(继承 Animal,覆盖 Speak,新增字段和方法) # ============================================================ class Dog(Animal): breed: t.CInt def __init__(self, n: t.CInt, b: t.CInt): self.name = n self.breed = b def Speak(self) -> t.CInt: return 1 def GetBreed(self) -> t.CInt: return self.breed # ============================================================ # 子类 Cat(继承 Animal,不覆盖 Speak,新增字段和方法) # ============================================================ class Cat(Animal): color: t.CInt def __init__(self, n: t.CInt, col: t.CInt): self.name = n self.color = col def GetColor(self) -> t.CInt: return self.color # ============================================================ # 主函数 # ============================================================ def inherit_test() -> int: # ============================================================ # 测试 1: 基类 Animal # ============================================================ stdio.printf("inherit: === Test 1: Base Class ===\n") a: Animal = Animal(42) aname: int = a.GetName() stdio.printf("inherit: a.GetName()=%d (expected 42)\n", aname) if aname != 42: stdio.printf("[FAIL] a.GetName()=%d expected 42\n", aname) return 1 aspeak: int = a.Speak() stdio.printf("inherit: a.Speak()=%d (expected 0)\n", aspeak) if aspeak != 0: stdio.printf("[FAIL] a.Speak()=%d expected 0\n", aspeak) return 1 # ============================================================ # 测试 2: 子类 Dog(覆盖 Speak,继承 GetName) # ============================================================ stdio.printf("inherit: === Test 2: Dog (override Speak) ===\n") d: Dog = Dog(100, 7) dname: int = d.GetName() stdio.printf("inherit: d.GetName()=%d (expected 100)\n", dname) if dname != 100: stdio.printf("[FAIL] d.GetName()=%d expected 100\n", dname) return 1 dspeak: int = d.Speak() stdio.printf("inherit: d.Speak()=%d (expected 1)\n", dspeak) if dspeak != 1: stdio.printf("[FAIL] d.Speak()=%d expected 1\n", dspeak) return 1 dbreed: int = d.GetBreed() stdio.printf("inherit: d.GetBreed()=%d (expected 7)\n", dbreed) if dbreed != 7: stdio.printf("[FAIL] d.GetBreed()=%d expected 7\n", dbreed) return 1 # ============================================================ # 测试 3: 子类 Cat(不覆盖 Speak,继承 GetName) # ============================================================ stdio.printf("inherit: === Test 3: Cat (inherit Speak) ===\n") ct: Cat = Cat(200, 3) cname: int = ct.GetName() stdio.printf("inherit: ct.GetName()=%d (expected 200)\n", cname) if cname != 200: stdio.printf("[FAIL] ct.GetName()=%d expected 200\n", cname) return 1 cspeak: int = ct.Speak() stdio.printf("inherit: ct.Speak()=%d (expected 0)\n", cspeak) if cspeak != 0: stdio.printf("[FAIL] ct.Speak()=%d expected 0\n", cspeak) return 1 ccolor: int = ct.GetColor() stdio.printf("inherit: ct.GetColor()=%d (expected 3)\n", ccolor) if ccolor != 3: stdio.printf("[FAIL] ct.GetColor()=%d expected 3\n", ccolor) return 1 stdio.printf("inherit: === All Tests Passed ===\n") return 0