<b>C++箴言:谨严利用私有担当</b>[VC/C++编程]
本文“<b>C++箴言:谨严利用私有担当</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
在《C++箴言:确保公开担当模拟“is-a”》一文中阐述了 C++ 将 public inheritance(公有担当)视为一个 is-a 关系.当给定一个 hierarchy(担当体系),此中有一个 class Student 从一个 class Person 公有担当,当为一个函数调用的成功而有必要时,需求将 Students 隐式转型为 Persons,它通过向编译器展示来做到这一点.用 private inheritance(私有担当)替换 public inheritance(公有担当)把这个例子的一部份重做一下是值得的:
class Person { ... };
class Student: private Person { ... }; // inheritance is now private
void eat(const Person& p); // anyone can eat
void study(const Student& s); // only students study
Person p; // p is a Person
Student s; // s is a Student
eat(p); // fine, p is a Person
eat(s); // error! a Student isn't a Person
很明显,private inheritance(私有担当)不意味着 is-a.那么它意味着什么呢?
“喂!”你说:“在我们得到它的含义之前,我们先看看它的行为.private inheritance(私有担当)有怎样的行为呢?”好吧,支配 private inheritance(私有担当)的第一个法则你只能从行动中看到:与 public inheritance(公有担当)对比,假如 classes(类)之间的 inheritance relationship(担当关系)是 private(私有)的,编译器普通不会将一个 derived class object(派生类对象)(诸如 Student)转型为一个 base class object(基类对象)(诸如 Person).这就是为什么为 object(对象)s 调用 eat 会失利.第二个法则是从一个 private base class(私有基类)担当的 members(成员)会成为 derived class(派生类)的 private members(私有成员),即便它们在 base class(基类)中是 protected(保护)的或 public(公有)的.
以上是“<b>C++箴言:谨严利用私有担当</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |