private 继承的问题

heaven33 2009-08-01 02:56:54
vc6.0编译器:
#include <iostream>

using namespace std;


class A
{
public:
virtual void f(){cout << "A f" << endl;}
};

class B : private A
{
private:
void f() {cout << "B f" << endl;}
};


int main()
{
//B b;
//A & a = b;
A * a = new B;

a->f();

}

这段代码为什么有错误呢?
G:\Program Files\Microsoft Visual Studio\MyProjects\Cpp1.cpp(23) : error C2243: 'type cast' : conversion from 'class B *' to 'class A *' exists, but is inaccessible
...全文
59 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lijian22500 2009-08-01
  • 打赏
  • 举报
回复
private 继承,基类的public,protect都变成子类的private供子类方法调用。
子类对象无法访问子类的private属性和方法。
yshuise 2009-08-01
  • 打赏
  • 举报
回复
private一般作为实现,public才是作为借口访问。
lzy0001sl 2009-08-01
  • 打赏
  • 举报
回复

B b;
A * a = &b;
//A * a = new B;
a->f();

改成这样也是一样不行的。楼主可能想测试下函数的覆盖吧,改成public就好了嘛。
wanjingwei 2009-08-01
  • 打赏
  • 举报
回复
是挺好的
cl383804490 2009-08-01
  • 打赏
  • 举报
回复
楼上解释的很好了...
mstlq 2009-08-01
  • 打赏
  • 举报
回复
因为B是私有继承自A,所以B的指针不能赋值给A类指针,这是规定

如果B的指针可以赋值给A的话,世界会乱套的,打个比方吧,如果A里面有数据成员。

class A 
{
public:
int i;//数据成员
virtual void f(){cout << "A f" << endl;}
};

class B : privateA
{
private:
void f() {cout << "B f" << endl;}
};


B *b = new B();
由于B是私有继承,所以b->i是无权访问的^_^;
如果 A *a= new B();可以通过编译,那么就可以使用a->i来访问一个本不应该被访问到的数据了,封装性啊,完了╮(╯_╰)╭

64,643

社区成员

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

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