私有继承的用法疑问

xiao_potato 2007-06-23 08:41:40
#include <iostream>
#include <string>

class PersonInfo
{
public:
virtual std::string getName() = 0;
};
class Person: private PersonInfo
{
public:
PersonInfo& getInfoRef()
{
return *this;
}
PersonInfo* getInfoP()
{
return this;
}
virtual std::string getName()
{
return "SuperMan";
}
};

int main(void)
{
Person* p = new Person();

PersonInfo& info = p->getInfoRef();
std::cout << info.getName() << std::endl;

PersonInfo* pInfo = p->getInfoP();
//PersonInfo *pInfo = new Person();//error
std::cout << pInfo->getName() << std::endl;

system("PAUSE");
return 0;
}

这算什么用法?
为什么通过This返回能达到public继承一样的效果?
在什么场景下需要考虑这么使用?
...全文
206 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
coobeara 2007-06-24
  • 打赏
  • 举报
回复
首先一个person不是一个personInfo,所以不能用public继承。

如果给person再加一个纯抽象类,PersonBase,把getInfoRef设置成纯虚函数。那么把PersonBase、personInfo暴露给用户时,用户就可以通过PersonBase可以获取personInfo。而至于实现这一块,用户可以不关心你是怎么实现的。

有个问题不是很明白,为什么通过返回this可以返回私有继承的基类,但是C++是不允许私有继承由派生类向基类转换的,如:PersonInfo *pInfo = new Person();//error

望高人指点。
uzone 2007-06-23
  • 打赏
  • 举报
回复
我觉得你这个例子不好.

私有继承用的没有特点.


我觉得私有继承是为了,子类中不想暴漏父类里面的一些借口,而又要用父类实现.

所以采用私有继承,但是你这个例子,用不用又有什么太大的区别呢?

我么看出来,希望高手执教.
xlbdan 2007-06-23
  • 打赏
  • 举报
回复
这算什么用法?
为什么通过This返回能达到public继承一样的效果?
在什么场景下需要考虑这么使用?


感觉这和伪构造函数的方法差不多,就是通过一个非构造函数来达到构造一个对象的效果

使用这种方法的地方一般是该类创建对象受限的情况下,通过这种函数来创建对象,起到控制对

象产生的目的


uzone 2007-06-23
  • 打赏
  • 举报
回复
你可以看下effctive c++.

上面有很详细的介绍.


coobeara 2007-06-23
  • 打赏
  • 举报
回复
关注!

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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