| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2743 人关注过本帖, 1 人收藏
标题:有关虚函数通过基类指针或基类引用实现动态多态性,求指教
只看楼主 加入收藏
Eliza
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2013-7-12
结帖率:100%
收藏(1)
已结贴  问题点数:20 回复次数:9 
有关虚函数通过基类指针或基类引用实现动态多态性,求指教
示例37:阅读下面程序,写出输出结果。
#include <iostream>                                                   // 编译预处理命令
using namespace std;                                                               // 使用命名空间std

class A
{
public:
         virtual void Show1() const { cout << "A" << endl; }         // 输出信息
         void Show2() const { cout << "A" << endl; }                  // 输出信息
};

class B: public A
{
public:
         void Show1() const { cout << "B" << endl; }                  // 输出信息
         void Show2() const { cout << "B" << endl; }                  // 输出信息
};

void Fun1(A obj) { obj.Show1(); }                                             // 定义Fun1()                  
void Fun2(const A &obj) { obj.Show1(); }                           // 定义Fun2()

int main()                                                                                 // 主函数main()
{
         B obj;                                                                        // 定义对象
         A *p = &obj;                                                               // 指针
         p->Show1();                                                               // 输出信息
         p->Show2();                                                               // 输出信息
         Fun1(obj);                                                                        // 调用Fun1()
         Fun2(obj);                                                                        // 调用Fun2()
         
         return 0;                                                        // 返回值0, 返回操作系统
}
请问这程序是怎么理解的,我感觉很混乱,不好记住,求指教
搜索更多相关主题的帖子: include public 多态性 虚函数 动态 
2013-07-20 17:16
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:4 
你是说面向对象的一个重大特点多态还是说什么?

要理解虚函数的虚表就行了

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-07-20 17:38
Eliza
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2013-7-12
收藏
得分:0 
回复 2楼 yuccn
多态,关键不理解
2013-07-20 18:06
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
收藏
得分:4 
要理解虚函数

思考赐予新生,时间在于定义
2013-07-20 19:46
lzj12530
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:264
专家分:841
注 册:2013-3-28
收藏
得分:4 
虚函数,是C++ 执行期识别的基础。从父类继承的虚函数函数,在编译阶段是不会确定其指向。但是在运行的时候便会根据指针类型自行识别出相应的函数。这就是虚函数的好处,可以说虚函数就是面向对象的多态。 也是整个C++程序设计的重要组成。

C++菜鸟
2013-07-20 20:44
lzj12530
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:264
专家分:841
注 册:2013-3-28
收藏
得分:0 
多态,顾名思义就是多种形态。 比如说要绘制一个图形(抽象类),而长方形,三角形,五边形等都是继承自图形类。那么在图形类里面的绘图函数只能是一个概念而不能实际绘制出图形(因为无法确定是什么)。而在长方形类里面可以对图形类的绘图函数进行重写,以达到相应的绘图的目的。那么这个过程就是多态。 也是面向对象的过程,因对象不同而采用不同的实现方法,但是都是绘图。

C++菜鸟
2013-07-20 20:49
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:4 
这段代码,哪里不理解?
指明?

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-07-21 06:39
Eliza
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2013-7-12
收藏
得分:0 
回复 7楼 peach5460
void Fun2(const A &obj) { obj.Show1(); }

主函数中Fun2(obj);是调用基类还是派生类的Show1
2013-07-21 17:14
a764934018
Rank: 1
等 级:新手上路
帖 子:2
专家分:4
注 册:2013-7-21
收藏
得分:4 
应该是调用B类的show1吧,因为那obj引用的是类B的对象啊,而且show1是虚函数.
2013-07-21 19:52
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:0 
Fun2(obj);
子类的

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-08-03 17:01
快速回复:有关虚函数通过基类指针或基类引用实现动态多态性,求指教
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017791 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved