共计 694 个字符,预计需要花费 2 分钟才能阅读完成。
先给结论:
1.private 继承就是一种纯粹的实现技术 : 意味着老子继承你, 纯粹是看中了你里面的某些函数实现罢了, 不想跟你有别的关系;
2. 一般来说私有继承, 与复合类的作用类似, 可以互换 (复合类更容易理解)
3. 这个新的类将不会与父类指针有关系 (接口都变 private 了)
与 public 继承的区别是 父类的所有接口都不可用了 (变为 private) , 换句话说:
class B{};
class D : private B{}; //private
D d;
B *pb = &d; // 这里将编译出错; 既然父类的所有接口都是 private 了. 那么 pb 又有什么意义呢?
通过上面可知与 public 继承的区别了; 那 private 继承用来干嘛??
比如有这么一个时间类 , 另一个 widget 也想有超时的功能:
class Timer{
public:
virtual void timeout(){ cout << __FUNCTION__ << endl;} // 用于计算超时功能
};
class Widget: private Timer{//private 继承
private: // 这里也改 private 或许比较好, 如果是 public 接口, 有可能不太好哦. 客户误意味 widget 居然有超时!
virtual void timeout() {
Timer::timeout(); // 调用父类的超时功能
cout << __FUNCTION__ << endl; // 干自己的事
}
};
像类似这种情况下就可以使用 private 继承 ; 如果改成 public 继承或许有些奇怪, 比如: Timer *pt = new Widget ??? 好像两者没啥关系呢.
最后: private 继承意味着, 俺只想获取某些函数实现;