社区
C++ 语言
帖子详情
这里虚函数为什么输出2
loooool
2007-05-10 02:31:51
#include <iostream>
using namespace std;
class base
{
public:
virtual fun(){cout << 1;};
};
class derived : public base
{
public:
fun(){cout << 2;};
};
void main()
{
base b;
derived *dp;
dp=(derived*) &b;
dp->fun();
}
为什么输出2
...全文
259
10
打赏
收藏
这里虚函数为什么输出2
#include using namespace std; class base { public: virtual fun(){cout << 1;}; }; class derived : public base { public: fun(){cout <fun(); } 为什么输出2
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
isarc
2007-05-11
打赏
举报
回复
mark,有收获。
xxyifan
2007-05-10
打赏
举报
回复
虚假函数表里的指针指向什么就会输出什么,另外,你不能指往这个指针指向对象中没有的东西,这里dp指向是基类对象,如果用多态,就用基类的指针指向子类的对象
minioreo
2007-05-10
打赏
举报
回复
指针指向什么对象就调用什么对象的函数 虚函数的用法
expter
2007-05-10
打赏
举报
回复
1撒
因为dp的地址是指向b..
yzcurry
2007-05-10
打赏
举报
回复
这是对的,因为你dp只是引用了一下b,而b是base的一个对象,你说这个结果是什么?
xgbing
2007-05-10
打赏
举报
回复
输出1就对了
loooool
2007-05-10
打赏
举报
回复
sorry,我是搂主,打错了,应该是输出1
我用vc6的编译器没有抱错,有一个警告。
如果按照虚函数的说法这里不是应该输出2吗?
redex
2007-05-10
打赏
举报
回复
gcc 3.4.6 输出1
楼主是不是在开玩笑?? 首先这个程序就编译通不过.
believefym
2007-05-10
打赏
举报
回复
这个例子跟虚函数、多态没有关系
多态、输出2:
base *b = new derived;
b->fun();
believefym
2007-05-10
打赏
举报
回复
vs2005输出1
楼主用的什么编译器,fun没有返回类型都能编译通过?
C++
虚函数
详解
C++
虚函数
详解 前言 C++的特性使得我们可以使用函数继承的方法快速实现开发,而为了满足多态与泛型编程这一性质,C++允许用户使用
虚函数
**(virtual function)来完成运行时决议这一操作,这与一般的编译时决定**有着本质的区别。
虚函数
表实现原理
虚函数
的实现是由两个部分组成的,
虚函数
指针与
虚函数
表。
虚函数
指针
虚函数
指针**(virtual function pointer)*...
为什么析构函数必须是
虚函数
?为什么默认的析构函数不是
虚函数
?
微信搜索“编程笔记本”,获取更多信息 ------------- codingbook2020 ------------- 今天我们来谈一谈面试 C++ 工程师时经常被谈到的一个问题:为什么析构函数必须是
虚函数
?为什么默认的析构函数不是
虚函数
? 首先,我们看一下百度百科对
虚函数
是怎么定义的: 在某基类中声明为 virtual并在一个或多个派生类中被重新定义的成员函数,用法格式为:virtual...
为什么父类析构函数必须为
虚函数
为什么父类析构函数必须为
虚函数
在这里先说答案,后面详细解释 1、如果父类的析构函数不是
虚函数
,则不会触发动态绑定(多态),结果就是只会调用父类的析构函数,而不会调用子类的析构函数,从而可能导致子类的内存泄漏(如果子类析构函数中存在free delete 等释放内存操作时); 2、如果父类的析构函数是
虚函数
,则子类的析构函数一定是
虚函数
(即使是子类的析构函数不加virtual,这是C++的语法规则),则会在父类指针或引用指向一个子类时,触发动态绑定(多态),析构实例化对象时,若是子类则会执行子类的析构函数
一文读懂C++
虚函数
的内存模型
一文彻底读懂C++
虚函数
表的实现机制(使用GDB内存布局)1、
虚函数
简介2、
虚函数
表简介3、有继承关系的
虚函数
表剖析3.1、单继承无
虚函数
覆盖的情况3.2、单继承有
虚函数
覆盖的情况3.3、多重继承的情况3.4、多层继承的情况4、总结 1、
虚函数
简介 C++中有两种方式实现多态,即重载和覆盖。 重载:是指允许存在多个同名函数,而这些函数的参数表不同(参数个数不同、参数类型不同或者两者都不同)。 覆盖:是指子类重新定义父类的
虚函数
的做法,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际
python
虚函数
_
虚函数
原理
一般继承(无
虚函数
覆盖)下面,再让我们来看看继承时的
虚函数
表是什么样的。假设有如下所示的一个继承关系: 请注意,在这个继承关系中,子类没有重载任何父类的函数。那么,在派生类的实例中,对于实例:Derive d; 的
虚函数
表如下: 我们可以看到下面几点:1)
虚函数
按照其声明顺序放于表中。2)父类的
虚函数
在子类的
虚函数
前面。我相信聪明的你一定可以参考前面的那个程序,来编写一段程序来验证。一...
C++ 语言
65,210
社区成员
250,518
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章