You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

main.cc 2.1 kB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. #include "../checker.h"
  2. // READ: 虚函数 <https://zh.cppreference.com/w/cpp/language/virtual>
  3. struct A {
  4. virtual char virtual_name() const {
  5. return 'A';
  6. }
  7. char direct_name() const {
  8. return 'A';
  9. }
  10. };
  11. struct B : public A {
  12. // READ: override <https://zh.cppreference.com/w/cpp/language/override>
  13. char virtual_name() const override {
  14. return 'B';
  15. }
  16. char direct_name() const {
  17. return 'B';
  18. }
  19. };
  20. struct C : public B {
  21. // READ: final <https://zh.cppreference.com/w/cpp/language/final>
  22. char virtual_name() const final {
  23. return 'C';
  24. }
  25. char direct_name() const {
  26. return 'C';
  27. }
  28. };
  29. struct D : public C {
  30. char direct_name() const {
  31. return 'D';
  32. }
  33. };
  34. int main(int argc, char **argv) {
  35. constexpr auto MSG = "Replace '?' with its correct name.";
  36. A a;
  37. B b;
  38. C c;
  39. D d;
  40. ASSERT(a.virtual_name() == '?', MSG);
  41. ASSERT(b.virtual_name() == '?', MSG);
  42. ASSERT(c.virtual_name() == '?', MSG);
  43. ASSERT(d.virtual_name() == '?', MSG);
  44. ASSERT(a.direct_name() == '?', MSG);
  45. ASSERT(b.direct_name() == '?', MSG);
  46. ASSERT(c.direct_name() == '?', MSG);
  47. ASSERT(d.direct_name() == '?', MSG);
  48. A &rab = b;
  49. B &rbc = c;
  50. C &rcd = d;
  51. ASSERT(rab.virtual_name() == '?', MSG);
  52. ASSERT(rbc.virtual_name() == '?', MSG);
  53. ASSERT(rcd.virtual_name() == '?', MSG);
  54. ASSERT(rab.direct_name() == '?', MSG);
  55. ASSERT(rbc.direct_name() == '?', MSG);
  56. ASSERT(rcd.direct_name() == '?', MSG);
  57. A &rac = c;
  58. B &rbd = d;
  59. ASSERT(rac.virtual_name() == '?', MSG);
  60. ASSERT(rbd.virtual_name() == '?', MSG);
  61. ASSERT(rac.direct_name() == '?', MSG);
  62. ASSERT(rbd.direct_name() == '?', MSG);
  63. A &rad = d;
  64. ASSERT(rad.virtual_name() == '?', MSG);
  65. ASSERT(rad.direct_name() == '?', MSG);
  66. return 0;
  67. }
  68. // READ: 扩展阅读-纯虚、抽象 <https://zh.cppreference.com/w/cpp/language/abstract_class>
  69. // READ: 扩展阅读-虚继承 <https://zh.cppreference.com/w/cpp/language/derived_class>

计算机大作业