访问权限private public protected的问题

xuzhitao1987 2009-10-24 12:49:48
#include<iostream.h>
class animal
{
public:
void eat()
{
cout<<"animal eat"<<endl;
}
void sleep()
{
cout<<"animal eat"<<endl;
}
void breath()
{
cout<<"animal breath"<<endl;
}
};
class fish:privateanimal
{
};
void main()
{
animal an;
fish fh;
an.eat();
fh.eat();
}
编译词程序时出现错误
error C2248: 'eat' : cannot access public member declared in class 'animal'
如果把第18行的红色字体private改成public则一切正常。请问,此处是不是只能用public公有化继承,而不能用private和protected来替代啊?
...全文
231 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
lihan6415151528 2009-10-25
  • 打赏
  • 举报
回复
你可以用public继承
或者私有继承的话
显示写出方法名再 Base::functionname();这样在方法里面调用
xuzhitao1987 2009-10-25
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 kimjihoo 的回复:]


任何时候都可以用private和protected 看你自己的想法。一般用public和protected;(下面说明)
private 把基类的public和protected 在派生类中变成了private;
public 基类public和protected 变成public
private 基类public和protected变成private

注意一点是无论private protected public 在派生类中是不能直接去访问基类的private的,只能通过基类提供的public才能够访问。(如果是public或者protected的话)

fish fh;
fh.eat();//fh是一个派生类对象,作为一个对象是不能直接调用private成员的。
如果你在这想让派生对象能够体现出eat()行为,那么必须在fish中public部分写一个成员函数调用它。(以后用virtual)
public:
void showeat(){eat();}
类的声明第一个字母大写。 你没理解好面对对象编程类的封装性 思想。
不知道你看明白了没。
[/Quote]




你的意思是不是这样的啊:
本程序中,基类animal中的成员是public的,由于private的作用使得派生类fish中的成员函数变成了private的形式,因此主函数main不能访问fish中的成员,而只能访问animal中的成员。再在fish中定义一个public形式的eat函数,主函数就可以访问了。
sxc232 2009-10-25
  • 打赏
  • 举报
回复
不太懂
anhongsen521 2009-10-25
  • 打赏
  • 举报
回复
dsa
kimJihoo 2009-10-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 xuzhitao1987 的回复:]
那什么时候可用private和protected的啊?可否举个例子啊?
[/Quote]
任何时候都可以用private和protected 看你自己的想法。一般用public和protected;(下面说明)
private 把基类的public和protected 在派生类中变成了private;
public 基类public和protected 变成public
private 基类public和protected变成private

注意一点是无论private protected public 在派生类中是不能直接去访问基类的private的,只能通过基类提供的public才能够访问。(如果是public或者protected的话)

fish fh;
fh.eat();//fh是一个派生类对象,作为一个对象是不能直接调用private成员的。
如果你在这想让派生对象能够体现出eat()行为,那么必须在fish中public部分写一个成员函数调用它。(以后用virtual)
public:
void showeat(){eat();}
类的声明第一个字母大写。 你没理解好面对对象编程类的封装性 思想。
不知道你看明白了没。
aimie 2009-10-25
  • 打赏
  • 举报
回复
protected继承可见,private只有自己可见,public那里都可以见
书上都写得很清楚的
zhengjiankang 2009-10-24
  • 打赏
  • 举报
回复
C++ primer上面有详细的解释。
xuzhitao1987 2009-10-24
  • 打赏
  • 举报
回复
那什么时候可用private和protected的啊?可否举个例子啊?
wanghao111 2009-10-24
  • 打赏
  • 举报
回复
就楼主的程序而言,只能是public
www_adintr_com 2009-10-24
  • 打赏
  • 举报
回复
3 种继承有不同的含义:
public 继承才是接口继承,可以同时继承功能和接口
private 继承只是继承了功能,但是要继承功能的时候一般都会采用包含关系,不会使用继承关系。所以基本看不到。
protected 哎,看不出来有什么意义,他的存在或许纯粹让 C++ 的语法能对称点。

33,311

社区成员

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

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