作者LPH66 ((short)(-15074))
看板C_and_CPP
标题Re: [问题] 关於继承的问题
时间Fri May 22 16:57:28 2009
※ 引述《Ericcccc (Juan)》之铭言:
: 我刚刚试了在QQ()里面写cout << "num = " << num << endl;
: 这样反而可以印的出来,所以说protected的data member跟member function
: 被呼叫的方法其实不是一样的?如果是data member可以直接在Cccc存取,
: 而如果是function的话,则必须要像QQ大 所讲的,用member fuction呼叫他才能使用
: 是这样吗?是这样的话我就了解了,只是觉得好怪喔~~ 谢谢你的回答:)
这些个修饰子是在讲所谓 visibility
就是该 class 外面可不可以看得到这个东西
public → 外面看得到
private → 外面看不到,继承我的人也不会有
protected → 外面看不到,但继承我的人会有
class 里面的话 反正是我家 我要找谁就找谁 不关外面的事
所以在 class 里面和这些东西就都没有关系
以你的例子
Caaa::show 是 public 所以我们可以在 class 外面 (例如 main) 这样写:
Caaa testA;
testA.show(); //OK
Cbbb::show 继承了 Caaa::show
但是因为是 protected 继承
所以 Cbbb::show 变成了 protected
Cccc::show 再继承下来
虽然是 public 继承
不过 Cbbb::show 是 protected 所以 Cccc::show 也会是 protected
所以这样写的话
Cccc testC;
testC.show(); //error, 因为 Cccc::show 是 protected
QQ29 所加的 Cccc::QQ 是 public 所以外面看得到它
而 Cccc::QQ 是 Cccc 的 member 所以它一定可以找得到同属於 Cccc 的 Cccc::show
不论它是public/private/protected
於是这样就变成了在 Cccc
我们要经过负责和外面接触(public)的 Cccc::QQ
来呼叫躲在里面(private/protected)的 Cccc::show
Caaa::num 也是一路这样继承下来的
只是它一开始就是 protected 所以一路继承下来之後也依然是 protected
以上这些全部和它是 member variable 还是 member function 完全无关
你试着在你的 main 写上 cout<<c.num<<endl; 一样会有问题
这就和你在 main 写 c.show(); 会出问题是一样的
--
実琴:「
河野!你真的就这样被
物质慾望给吸引过去了吗?!」
亨:「只要
穿着女装摆出亲切的样子,所有必要花费就能
全免,似乎一点都不坏啊。」
実琴:「难道你没有
男人的尊严了吗?!」
亨:(断然道)「
没有。在
节衣缩食且
生活吃紧的
学生面前,
没有那种东西。」
--プリンセス・プリンセス 第二话
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.250.80
1F:推 Ericcccc:谢谢你!! 我完全知道我的观念错在哪里了 我没有搞清楚 05/22 17:47
2F:→ Ericcccc:class里面跟外面(main)的关系 这样一来我终於弄懂了:D 05/22 17:48
3F:→ Ericcccc:感激不尽!! 05/22 17:48