Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

請問C++高手(有關virtual function)

0 views
Skip to first unread message

我確定了

unread,
May 28, 2001, 1:05:04 PM5/28/01
to

請問virtual function為什麼在base class 要設為public....

如果~~
class a{
protected:
^^^^^^^^^^^
virtual int fun()=0;
}
class b : public a{
public:
int fun(){defination;}
}
void main(){
a *p;
p = new b;
p->fun;
^^^^^^^
}
compiler會告訴你。。。

p::fun is not accessible.....

為什麼會一定要宣告為public呢?

難道是有別人去呼叫它嗎?

請任何高手回答吧~~

--
※ Origin: 楓橋驛站<bbs.cs.nthu.edu.tw> ◆ From: u860121.SHYR.ab.nthu.edu.tw

還是S2588好

unread,
May 28, 2001, 3:00:14 PM5/28/01
to
※ 引述《ridej...@bbs.cs.nthu.edu.tw (我確定了)》之銘言:

> 請問virtual function為什麼在base class 要設為public....
> 如果~~
> class a{
> protected:
> ^^^^^^^^^^^
> virtual int fun()=0;
> }
> class b : public a{
> public:
> int fun(){defination;}
> }
> void main(){
> a *p;
> p = new b;
> p->fun;
> ^^^^^^^
> }
因為你在不是member的function (main())
要呼叫... virtual?! 跟virtual有什麼關係
.
--
[1;32m※ Origin: [33m克萊恩大地 [37m<Terry.Dragon2.Net> [m
[1;31m◆ From: [36mSuperSct.Dorm13.NCTU.edu.tw [m

世界上最強的咖啡糖

unread,
May 28, 2001, 3:59:21 PM5/28/01
to
※ 引述《ridej...@bbs.cs.nthu.edu.tw (我確定了)》之銘言:
> 請問virtual function為什麼在base class 要設為public....
> 如果~~
> class a{
> protected:
> ^^^^^^^^^^^
> virtual int fun()=0;
> }
> class b : public a{
> public:
> int fun(){defination;}
> }
> void main(){
> a *p;
> p = new b;
> p->fun;
> ^^^^^^^
> }
> compiler會告訴你。。。
> p::fun is not accessible.....
> 為什麼會一定要宣告為public呢?
> 難道是有別人去呼叫它嗎?
> 請任何高手回答吧~~

你有沒有寫錯啊......應該是p->fun()吧?
假如是寫錯了,那就是sytax error囉.......
--
Ξ Origin: 中興大學天樞資訊網 <b...@bbs.nchu.edu.tw> [FROM: ppp103.ppp.uday]

小馬

unread,
May 28, 2001, 3:37:37 PM5/28/01
to
※ 引述《ridej...@bbs.cs.nthu.edu.tw (我確定了)》之銘言:

> class a{
> protected:
> ^^^^^^^^^^^
> virtual int fun()=0;
> }
> void main(){
> a *p;
> p = new b;
> p->fun;
> ^^^^^^^
> }
> compiler會告訴你。。。
> p::fun is not accessible.....
> 為什麼會一定要宣告為public呢?

因為 p 的型態是 a class。
按理你使用 class a 的指標,就只能引發(invoke) class a 的 members
(即使 p 真正指向的是 class b 的物件)。

在這邊 a::fun 的 access level 是 protected,除非是繼承自 a 的物件
才能 invoke a::fun,所以 main() 當然沒這權限去存取 a::fun。

--

mbox: m...@im.fju.edu.tw
Web : http://mmlab.im.fju.edu.tw/~maa
--
[1;32m※ Origin: [33m謠 言 報 [37m<bbs.csie.fju.edu.tw> [m
[1;31m◆ From: [36madsl-nk-A1174.hitron.net [m

0 new messages