虚函数定义成private有意义么?
比如
private:
virtual void speak();
虚函数是为了让派生类改写
但是如果虚函数定义成private,是不是没有意义?
问题点数:10、回复次数:8Top
1 楼xiaocai0001(高楼目尽欲黄昏/梧桐叶上萧萧雨)回复于 2006-03-02 16:47:07 得分 1
有啊
你就不可以通过基类指针去访问派生类的这个函数了!Top
2 楼howyougen(夫孝,德之本也,教之所由生也)回复于 2006-03-02 16:50:31 得分 0
有啥意义?
Top
3 楼howyougen(夫孝,德之本也,教之所由生也)回复于 2006-03-02 16:55:34 得分 0
虚函数本来就是多态使用的,
如果不能用基类指针或引用访问,那还有什么意义?Top
4 楼adintr(www.adintr.com)(风流总被雨打风吹去)回复于 2006-03-02 17:01:15 得分 1
有啊,比如:
class InnerFace
{
private:
virtual void fun1() = 0;
friend class UseInner;
}
class UseFace
{
public:
...
}
UseFace 需要使用一个多态函数来实现它对外提供的功能,但不希望外面直接使用这个多态函数。。Top
5 楼Mephisto_76((望美人如梦))回复于 2006-03-02 17:54:21 得分 8
定义private virtual function是有意义的,代码如下:
class B
{
public:
virtual `B();
private:
virtual char* id()
{
return "Base";
}
public:
void Print(){ printf( "Hello,I am %s", id() ); }
}
class D : public B
{
private:
virtual char* id()
{
//由于是private,这里不能用B::id();
return "Derived";
}
}
B* base = new B();
base->Print();
B* derived = new D();
derived->Print();
上述两个输出的内容是不同的,在C++中virtual表示多态,public、protected和private表示访问权限,它们是正交的两个概念。用private声明虚函数,表示派生类对这个虚函数必需要有自己的实现,而不能调用基类的实现。
Top
6 楼Jinhao(辣子鸡丁·GAME就这样OVER了)回复于 2006-03-02 18:02:33 得分 0
consider a Template MethodTop
7 楼ox_thedarkness()回复于 2006-03-02 18:03:28 得分 0
哦~~ 赞阿,楼上的有道理~~Top
8 楼howyougen(夫孝,德之本也,教之所由生也)回复于 2006-03-02 19:17:27 得分 0
//打算改写成下面这样,却发现与virtual的含义背离了 :)
#include <stdio.h>
class B
{
public:
virtual ~B(){}
private:
const char* id() //去掉virtual
{
return "Base";
}
public:
virtual void Print(){ printf( "Hello,I am %s\n", id() ); }
};
class D : public B
{
public:
virtual ~D(){}
//增加了这个
virtual void Print(){ printf( "Hello,I am %s\n", id() ); }
private:
const char* id() //去掉virtual
{
//由于是private,这里不能用B::id();
return "Derived";
}
};
int main()
{
B* base = new B();
base->Print();
B* derived = new D();
derived->Print();
return 0;
}
Top




