虚函数,从男女之别说起

有哥 2003-11-02 10:38:39
相似的情况很多,举例来说:
  我想做一个“人”类,以它为基类又要派生为“男人”、“女人”,“男人”、“女人”具有许多相同的属性及方法,例如都需要解手,但两者解手的执行过程并不相同。我需要在仅知道对象是一个“人”的子类实例的情况下,通过调用“解手”这一方法来完成解手功能,而不管男人还是女人,是不是需要在定义“人”类时定义一个公有的虚函数“解手”,然后在子类中重载这个函数。有谁应用自如的,能讲讲虚函数分别在父类、子类中定义以及使用时的要点吗?
...全文
36 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
BoyMgl 2003-11-26
  • 打赏
  • 举报
回复
你可以把男女相同的属性或方法事例化,把男女有别的函数或方法都声明为虚函数,到派生类去事例
guanshangming 2003-11-26
  • 打赏
  • 举报
回复
《深入浅出MFC》有很好的例子
fantasylu 2003-11-12
  • 打赏
  • 举报
回复
mark
riddler 2003-11-12
  • 打赏
  • 举报
回复
mark
klggg 2003-11-12
  • 打赏
  • 举报
回复
真的不太好理解,我这里有个有关虚函数的小例子,多多实验,应该会有点认识吧.

class base
{
public:
void move();
virtual void flash();
};

void base::move()
{
printf( "bmove\n");
}
void base::flash()
{
printf( "bflash\n");
}

class son:public base
{
public:
void move();
void flash();
};
void son::move()
{
printf( "smove\n");
}
void son::flash()
{
printf( "sflash\n");
}

void test (base *b)
{
b->move();
b->flash();
}

void test1 (son *b)
{
b->move();
b->flash();
}


int main ()
{
/* base *b=new base;
b->move();
b->flash();
delete b;
*/

son *b=new son;
test(b);
test1(b);
delete b;
printf ("Hello World!\n");
printf ("Press ENTER to continue...\n");
getchar ();
return 0;
}
kinglh 2003-11-11
  • 打赏
  • 举报
回复
帮你up一下
guanshangming 2003-11-11
  • 打赏
  • 举报
回复
纯虚函数作为一个基类和继承类的公共接口,虚函数当然我们要将其设为公有成员,否则就没有任何意义了.
yjy1001 2003-11-10
  • 打赏
  • 举报
回复
。。。。。。。。
我也很想 模拟出一份来

却—— 因为 文采不足,无以描述
有哥 2003-11-10
  • 打赏
  • 举报
回复
guanshangming() 的意思是不是:
纯虚函数就是没有函数定义只有声明的虚函数,定义了这样的虚函数的类称为抽象类,只能作为父类继承。而普通虚函数就是声明与定义都有的虚函数,它的类也就不是抽象类,可以创建实例了。
虚函数的访问范围是不是与其它函数一样呢?虚函数是否也区分私有还是公有,还是虚函数都是公有成员?
有哥 2003-11-10
  • 打赏
  • 举报
回复
自己up一下,自学而已,望各位多多指教
luomh98 2003-11-09
  • 打赏
  • 举报
回复
搞得我很糊涂
ThinkX 2003-11-09
  • 打赏
  • 举报
回复
我觉得将男人和女人作为人的子类有些别扭,而将性别作为人的一个属性更合理。
继承的目的是无限特殊化基类,而人的性别只有两个,并且不会变化,为什么用继承,难道准备随时在加上个不男不女。另外在交配时,如果只使用人作为基类,是不能保证不会出现同性交配的,当然用向下转换是可以解决的,但这样明显违背了面向对象的原则。
继承不是随便使用的,在大多数时候,它没有组合来的灵活。
guanshangming 2003-11-09
  • 打赏
  • 举报
回复
有意思。
虚函数分为纯虚函数和普通虚函数。
纯虚函数如
virtual void 解手(int)=0;
这定义了一个纯虚函数,定义了纯虚函数的类叫抽象类,抽象类不能创建一个实例,继承一个抽象类时,必须实现所有的纯虚函数,否则继承的类也将是一个抽象类。
在定义人这个类时,应该定义一个纯虚函数解手,那么,所有的继承类都要实现解手这个纯虚函数。
在使用这个类的实例时,就可以调用解手这一方法
有哥 2003-11-09
  • 打赏
  • 举报
回复
大道也在粪土之中嘛。
我还没用过虚函数,看书也不太理解(自学的),请各位确认一下:
1、是不是虚函数在父类中只需声明,而不需定义函数体,是可选还是必须?
2、是不是定义了虚函数的类的子类,都必须重载这个虚函数?
3、子类重载的虚函数访问父类成员的范围是什么,私有成员,保护成员,还是只有公有成员?
有哥 2003-11-09
  • 打赏
  • 举报
回复
主要是父类下有许多子类,不止两个,而且这些子类从外观(VCL控件)到实现都不一些,但调用的方式是一样的。说个高雅的例子吧,就像Office助手中的角色一样,可以调用的方法都是一样的,但实现的方式不一样,我也不能确定会面临的是怎样的子类,但想通过相同的Warning、Stop、Print等方法显示各自的动作,请各位不必执着于性别。我想弄懂的现在只是上面的三个问题。
12345678 2003-11-02
  • 打赏
  • 举报
回复
看了网上的贴, 好象抵制日货出成果了!
很多商店,电脑城都卖日货了~!
高兴.ing
chineseshit 2003-11-02
  • 打赏
  • 举报
回复
提问的艺术
bluedodo 2003-11-02
  • 打赏
  • 举报
回复
你有蛮无聊
Atomictry 2003-11-02
  • 打赏
  • 举报
回复
呵呵,调试程序的时候,有时觉得写得太无聊,也这么干过。
MartinWang 2003-11-02
  • 打赏
  • 举报
回复
有意思,真逗!!:)
加载更多回复(2)

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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