博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
虚函数的默认值
阅读量:3957 次
发布时间:2019-05-24

本文共 887 字,大约阅读时间需要 2 分钟。

这两天写的代码涉及到虚函数的默认值,来记个笔记

主要是以下case:

class Base{
public: virtual void print_msg(const char* msg = "Base") {
std::cout << msg << std::endl; return; }};class Derived : public Base{
public: virtual void print_msg(const char* msg = "Derived") override {
std::cout << msg << std::endl; return; }};int main(void){
Derived* ptr1 = new Derived; Base* ptr2 = ptr1; Base* ptr3 = new Base; ptr1->print_msg(); ptr2->print_msg(); ptr3->print_msg(); delete ptr1; delete ptr3; return;}

子类覆写了父类的虚函数,然而这个虚函数的参数在子类和父类中有不同的默认值,那么在实际运行中,默认值是以什么为准呢?

先说结论:

以运行时调用的类型为准。比如上面的例子中,ptr1是Derived类型的指针,那么通过ptr1调用print_msg函数,默认值就是Derived中函数参数的默认值;ptr2、ptr3是Base类型的指针,那么对应的,默认值就是Base中的默认值。

一开始,我以为这是在调用虚函数,读取虚函数表之前就已经先将参数压入栈中了,所以在压入参数时并不知道要跳转到的是什么函数。

不过我搞错了一件事,那就是默认值是在编译时期就确定的,所以是以编译时期可以看到的信息为准,也就是说调用时的变量类型决定了默认值究竟是什么。

转载地址:http://otxzi.baihongyu.com/

你可能感兴趣的文章
杭电ACM——2076,夹角有多大
查看>>
牛客练习赛43——B Tachibana Kanade Loves Probability(暴力,思维)
查看>>
牛客第十七届上海大学程序设计春季联赛——E CSL 的魔法(贪心)
查看>>
杭电ACM——1028,Ignatius and the Princess III(母函数)
查看>>
杭电ACM——1171,Big Event in HDU(母函数)
查看>>
杭电ACM——6491,时间间隔(思维)
查看>>
杭电AC——1085,Holding Bin-Laden Captive!(母函数)
查看>>
杭电ACM——2110,Crisis of HDU(母函数)
查看>>
杭电AM——2152,Fruit(母函数)
查看>>
杭电ACM——2566,统计硬币(DP)
查看>>
堆栈(数据结构)
查看>>
队列(数据结构)
查看>>
杭电ACM——1251,统计难题(Trie树)
查看>>
牛客网哈尔滨工程大学第十四届程序设计竞赛(同步赛)—— 小蚂蚁过马路(思维)
查看>>
牛客网哈尔滨工程大学第十四届程序设计竞赛(同步赛)—— 苹果手链(水题)
查看>>
杭电ACM——6518,Clumsy Keke(暴力+思维)
查看>>
杭电ACM——6512,Triangle(暴力 / 思维)
查看>>
牛客网哈尔滨工程大学第十四届程序设计竞赛(同步赛)——D 简单的烦恼(DP)
查看>>
牛客网哈尔滨工程大学第十四届程序设计竞赛(同步赛)——I 杨主席发糖(思维)
查看>>
杭电ACM——1305,Immediate Decodability(Trie树)
查看>>