虚函数的若干细节

1、在基类的某函数中调用虚函数的状况:
依然是动态绑定的,依然取决于基类指针实际指向的对象类型!
如:
派生类重写了虚函数print();
仅在基类的test()函数调用print()
实际输出:Child
说明即便是在基类的某函数中调用虚函数,仍然要看对象的实际类型,是动态绑定的!
 
2、虚函数带默认实参的状况:
当虚函数有默认实参的时候,这个实参的默认值将在编译时肯定,当调用虚函数的时候若是此参数没传入,那么默认值将使用“调用该虚函数的对象类型(并非实际类型)来肯定”!即不随动态绑定!与对象实际类型无关!
好比:
(1)若是基类类指针调用了这个虚函数并不传参,那么参数的默认值是派生类里声明的值,而无论此基类指针实际指向了基类仍是派生类!
(2)若是派生类指针调用了这个虚函数并不传参,那么参数默认值是派生类里声明的值。
 
一个程序:
基类的虚函数:print(),默认实参值=0
派生类重写了虚函数print(),默认实参值=100
 
 
输出为:Child:0 而不是100!
默认实参的默认值是编译时肯定的,因为b是Base类型指针,因此这里的i默认值 = Base类中print的i默认值,也就是0
 
因此,尽可能让派生类虚函数的默认实参与基类的一致~
相关文章
相关标签/搜索