侧边栏壁纸
博主头像
如此肤浅

但行好事,莫问前程!

  • 累计撰写 52 篇文章
  • 累计创建 6 个标签
  • 累计收到 6 条评论

目 录CONTENT

文章目录

条款32 确定你的 public 继承塑模出 is-a 关系

如此肤浅
2022-06-07 / 0 评论 / 0 点赞 / 20 阅读 / 527 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-06-07,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

1. “public继承”意味 is-a。适用于 base classes 身上的每一件事情一定也适用于 derived classes 身上,因为每一个 derived class 对象也都是一个 base class 对象。

如果一个派生类 D 以 public 形式继承了类 B,你便告诉 C++ 编译器说,每一个类型为 D 的对象同时也是一个类型为 B 的对象,反之不成立。B 比 D 更一般化,而 D 比 B 表现出更特殊化的概念。例如,学生是人,而并非每个人都是学生。

class Person { ... };
class Student: public Person { ... };

因此,在 C++ 中,任何函数如果期望获得一个类型为 Person(或 pointer-to-Person 或 reference-to-Person)的实参,也都愿意接受一个 Student 对象(或 pointer-to-Student 或 reference-to-Student):

void eat(const Person& p);
void study(const Student& s);
Person p;
Student s;
eat(p);
eat(s); // 正确,s是学生,而学生也是(is-a)人
study(s);
study(p); // 错误!p不是学生
0

评论区