类继承问题

萨斯特的风 2008-10-23 07:53:03
子类B继承于类A
假定A类中有函数PrintClassName() 为public
而如果B类继承的时候使用private这样会出现说
B::PrintClassName : cannot access private member declared in class 'B',不知道真正的原因。
还有类重载和重写的区别是什么?
...全文
110 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
beingstudio 2008-10-23
  • 打赏
  • 举报
回复
1 私有继承基类public会变成private

2 重载 其实就是一大坨不同名字函数,重写就是两个相同名字的函数
dfkjsdhfks 2008-10-23
  • 打赏
  • 举报
回复
#include<iostream>

using namespace std;
class A
{
///
public:
void PrintClassName(){cout <<"A";}
};
class B
{
private:
void PrintClassName(){cout <<"B";}
};

void main()
{
B b;
b.PrintClassName ();
}
error C2248: 'PrintClassName' : cannot access private member declared in class 'B'
是上面这种情况吗?
你将函数声明为了private,B的对象当然不能调用了,只有公有函数能调用private,你也没有继承啊,这里跟继承无关
你如果将B声明为public A的话也不行,因为会同名隐藏,所以当你声明为公有继承后,去掉B中的定义就会通过
#include<iostream>

using namespace std;
class A
{
///
public:
void PrintClassName(){cout <<"A";}
};
class B :public A
{
private:
//void PrintClassName(){cout <<"B";}
};

void main()
{
B b;
b.PrintClassName ();
}
elegant87 2008-10-23
  • 打赏
  • 举报
回复

class A
{
///
public:
void PrintClassName(){cout < <"A";}
};
class B
{
private:
void PrintClassName(){cout < <"B";} //这可是私有成员函数啊,外部对象是不可以访问的啊!
};
西山小月 2008-10-23
  • 打赏
  • 举报
回复
class B : public A
萨斯特的风 2008-10-23
  • 打赏
  • 举报
回复
我的意思是这样的
class A
{
///
public:
void PrintClassName(){cout<<"A";}
};
class B
{
private:
void PrintClassName(){cout<<"B";}
};
如果实例化的时候就会出错,原因?
fibbery 2008-10-23
  • 打赏
  • 举报
回复
PrintClassName函数可以在B类中被调用,但不能被其他程序调用,因为,继承是private的,A类的成员在B类中均为private。
lann64 2008-10-23
  • 打赏
  • 举报
回复
没看懂。
是说B : private A 这样private继承?

65,211

社区成员

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

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