【003 函数】静态函数和虚函数的区别?

一、静态函数和虚函数的区别

静态函数在编译的时候就已经确定运行时机,虚函数在运行的时候动态绑定。虚函数因为用了虚函数表机制,调用的时候会增加一次内存开销。

我们知道类的静态函数是没有this指针的,调用它时不需要创建对象,通过 类名::函数名(参数)的形式直接调用。静态函数只有唯一的一份,因此它的地址是固定不变的,所以编译的时候但凡遇到调用该静态函数的时候就知道调用的是哪一个函数因此说静态函数在编译的时候就已经确定运行时机。

而虚函数则不然,在程序运行的时候通过虚表指针查看对象的虚函数表(访问虚函数表就是所谓的访问内存)才能确定该函数的地址,即确定调用的是哪一个函数。这就解释了所说的“虚函数在运行的时候动态绑定。虚函数因为用了虚函数表机制,调用的时候会增加一次内存开销。
C++ 静态函数与虚函数的区别_黎晓舞指的博客-CSDN博客_静态函数和虚函数的区别


二、空类的大小为什么是1?

一个对象的指针指向该对象的第一个字节,如果该类大小为0,指针就没地方指了。 size为0,则不能区分该类实例化出的实例,为了实现每个实例在内存中都有一个独一无二的地址,编译器往往会给一个空类隐含的加一个字节。

空类的大小为什么是1? - 知乎


三、为什么父类指针可以指向子类?

可以通俗的理解,子类可能含有一些父类没有的成员变量或者方法函数,但是子类肯定继承了父类所有的成员变量和方法函数。
所以用父类指针指向子类时,没有问题,因为父类有的,子类都有,不会出现非法访问问题。但是如果用子类指针指向父类的话,一旦访问子类特有的方法函数或者成员变量,就会出现非法。

虽然父类指针可以指向子类,但是其访问范围还是仅仅局限于父类本身有的数据,那些子类的数据,父类指针是无法访问的。


怎么理解C++多态的“父类指针或引用指向子类对象”?_马小超i的博客-CSDN博客_c++父类引用指向子类对象

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kashine

你的鼓励将是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值