从未遇到过非要用私有继承的情况,请老师们给个只能用私有继承而不能组合的例子

menzi11 2011-11-17 05:29:34
也不是没遇到过private继承的情况和例子,可是感觉从没有非用不可的
情况,大多数都可以组合搞定,看过不少教材都说考虑组合优于私有继承,
那么,请问有没有某种情况,非要用private继承不可?
请老师们给个只能用私有继承而不能组合的例子,谢谢!
...全文
93 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
yisikaipu 2011-11-17
  • 打赏
  • 举报
回复
tom:
hungry
...
dididi

jack:
delicious
ohyeah
dididi
hello

rose:
kfc
ohyeahohyeah
hello
apple
请按任意键继续. . .
yisikaipu 2011-11-17
  • 打赏
  • 举报
回复
组合与私有继承有本质不同

两者只不过是能实现类似功能

没什么功能是非私有继承不可的,但它提供灵活性

比如下例,在既有的类上继承,又须阻断一些访问时,私有继承最灵活

class after70s
{
public:
virtual void eat(){cout <<"\thungry" <<endl;}
virtual void sex(){cout <<"\t..." <<endl;}

void bp(){cout <<"\tdididi" <<endl;}
};

class after80s: public after70s
{
public:
void eat(){cout <<"\tdelicious" <<endl;}
void sex(){cout <<"\tohyeah" <<endl;}

void cell(){cout <<"\thello" <<endl;}
};

class after90s: private after80s
{
public:
void eat(){cout <<"\tkfc" <<endl;}
void sex(){cout <<"\tohyeahohyeah" <<endl;}

using after80s::cell;
void iphone(){cout <<"\tapple" <<endl;}
};

void live(after70s *someone)
{
someone->eat();
someone->sex();
}

int main()
{
cout <<endl <<"tom:" <<endl;
after70s tom;
live(&tom);
tom.bp();

cout <<endl <<"jack:" <<endl;
after80s jack;
live(&jack);
jack.bp();
jack.cell();

cout <<endl <<"rose:" <<endl;
after90s rose;
live((after70s*)&rose);
//rose.bp(); // 90后不知道bp机
rose.cell();
rose.iphone();

return 0;
}
zzcmx2008 2011-11-17
  • 打赏
  • 举报
回复
多数都是public,private的没遇到
luciferisnotsatan 2011-11-17
  • 打赏
  • 举报
回复
不清楚,实际工作中没有遇到过。
对象 2011-11-17
  • 打赏
  • 举报
回复
如果你的类里面,想用另一个类里面的保护方法,或者想重载另一个类里的虚函数,用私有继承即可。

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧