C++子类能继承父类的私有成员吗?

glawrence 2009-03-17 12:18:15
我看一般书上都是写的子类能继承父类的私有成员,当不能访问,那为什么我下面的代码在visual c++里子类可以随意的访问那个LessonName呢,谢谢?

#include <iostream.h>
#include <afx.h>
class CLesson
{
private:
CString LessonName;
protected:
int LessonTime;
public:
CString Teacher;
void LessonInit(CString name,int time,CString teacher)
{
LessonName=name;
LessonTime=time;
Teacher=teacher;
}
void LessonShow()
{
cout<<"Lesson:"<<LessonName<<" Time:"<<LessonTime<<" Teacher:"<<Teacher<<endl;
}
virtual void TeacherInfo()
{
cout<<"BaseClass show "<<Teacher<<endl;
};
};
class CSubLesson : public CLesson
{
public:
void TimeInfo()
{
cout<<"Class Hour is "<<LessonTime<<endl;
}
void TimeInfo(int m)
{
cout<<"Class Hour is "<<LessonTime * m<<"分钟"<<endl;
}
void TeacherInfo()
{
cout<<"subClass show "<<Teacher<<endl;
}

};

void main()
{
CLesson lesson;
lesson.LessonInit("物理",60,"张老师");
lesson.LessonShow();
CSubLesson sublesson;
sublesson.LessonInit("化学",40,"王老师");
sublesson.LessonShow();
sublesson.TimeInfo();
sublesson.TimeInfo(45);

CLesson *l;
l=&lesson;
l->TeacherInfo();
l=&sublesson;
l->TeacherInfo();

}
...全文
1329 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
哈哈王戈多 2011-09-03
  • 打赏
  • 举报
回复
子类虽然继承了父类的私有成员,但是是不能用的,除非把它声明成公有的。
  • 打赏
  • 举报
回复
父类中的private属性和方法,子类虽然继承了,但这些属性和方法对子类是隐藏的,其访问权限仍然只局限在父类的CLASS内部,无法在子类中访问和重写。

这就好比孩子和爸爸,他们各需要有隐私一样,如果爸爸不想让孩子知道自己的银行帐号的密码,就可以把它设置成private属性,这样孩子就无法知道了。不然的话,如果儿女们胡来,把钱都取跑了,爸爸喝西北风?

如果爸爸去世了,就可以把银行帐号的密码设置成public属性,这样孩子们就可以取出钱分了

所以继承不等同继承遗产,孩子不能无权限的继承爸爸的所有东东,爸爸活着,银行帐号的密码是private,爸爸去世了,银行帐号的密码才是public.
爸爸可以通过private和public限制继承者有那些权限

那你也许就会说儿子其实没有继承爸爸的private属性和方法, 这样冒似更有说服力

但事实并非如此,这种继承的存在是事实.

否则的话,当儿子去调用爸爸的某个public方法,如果里边使用到某个private属性和方法,此时调用者是儿子而不是爸爸, 儿子如果没有继承爸爸的private属性和方法, 如何调用得到里边这个private属性和方法呢?此时,继承就体现出来了
sunnyplain 2009-03-17
  • 打赏
  • 举报
回复
老兄,你眼花了吧,你访问的是LessonTime,这是一个protected的
pengzhixi 2009-03-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 sys0008 的回复:]
是指类的实例不可以访问,而子类函数是可以访问的。
[/Quote]
子类的函数可以访问?你试下看看能访问不
pengzhixi 2009-03-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 sys0008 的回复:]
是指类的实例不可以访问,而子类函数是可以访问的。
[/Quote]
子类的函数可以访问?你试下看看能访问不
pengzhixi 2009-03-17
  • 打赏
  • 举报
回复
肯定能继承,但是不能使用而已。你可以从基类和派生类的大小就知道了
sys0008 2009-03-17
  • 打赏
  • 举报
回复
是指类的实例不可以访问,而子类函数是可以访问的。
Cpp权哥 2009-03-17
  • 打赏
  • 举报
回复
你的子类函数中根本没有访问父类的私有成员。在子类的任何函数中都不能直接访问父类中的私有成员,除非在父类中把它声明成友元。
jiyuanjie 2009-03-17
  • 打赏
  • 举报
回复
如果基类的私有成员在派生中能直接访问,那所谓的私有权限就失去意义了。
amossavez 2009-03-17
  • 打赏
  • 举报
回复
lesson.LessonInit("物理",60,"张老师");
是可以访问基类的私有数据成员的!
通过调用子类的函数来访问基类的私有成员!
glawrence 2009-03-17
  • 打赏
  • 举报
回复
谢谢楼上各位了,明白了,是不是就是子类独有的函数方法不能访问,而继承自父类的函数方法是可以访问的?

33,311

社区成员

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

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