C++函数覆盖的问题

hezuohua2008 2009-05-12 03:54:39
#include <iostream>
using namespace std;

class Base
{
public:
virtual void g(int i = 10){
cout << i << endl;

};

};

class Derived: public Base
{
public:
void g(int i = 20){
cout << "Derived::g() " << i << endl;
};
};


int main() {

Base* pb = new Derived;

pb->g();

delete pb;
return 0;
}

输出结果:"Derived::g() " 10
请高手解释一下,i值为什么是10,而不是20呢?谢谢
...全文
189 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hezuohua2008 2009-05-14
  • 打赏
  • 举报
回复
呵呵 谢谢各位的热心。看来真的好好看看Effective C++
fisher_047 2009-05-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 goodname 的回复:]
http://dev.csdn.net/author/fatalerror99/4f2b03d29e894d008c779da32848958e.html

Item 37: 绝不要重定义一个函数的 inherited default parameter value(通过继承得到的缺省参数值)
[/Quote]

其中的:

我知道,这全是老生常谈;你的确已经理解了 virtual functions(虚拟函数)。但是,当你考虑 virtual functions with default parameter values(带有缺省参数值的虚拟函数)时,就全乱了套,因为,如上所述,virtual functions(虚拟函数)是 dynamically bound(动态绑定),但 default parameters(缺省参数)是 statically bound(静态绑定)。这就意味着你最终调用了一个定义在 derived class(派生类)中的 virtual function(虚拟函数)却使用了一个来自 base class(基类)的 default parameter value(缺省参数值)。

完全解释了楼主的问题,学习了!
pathuang68 2009-05-12
  • 打赏
  • 举报
回复
(1L + 2L)的回帖 = 最好的答案 :)
crst_zh 2009-05-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 goodname 的回复:]
http://dev.csdn.net/author/fatalerror99/4f2b03d29e894d008c779da32848958e.html

Item 37: 绝不要重定义一个函数的 inherited default parameter value(通过继承得到的缺省参数值)
[/Quote]


一针见血
crst_zh 2009-05-12
  • 打赏
  • 举报
回复
virtual函数是动态绑定的,而缺省参数值却是静态绑定的。
crst_zh 2009-05-12
  • 打赏
  • 举报
回复
Base 和 Derived 都没有成员变量,类的布局里面只有虚函数表指针。

goodname 2009-05-12
  • 打赏
  • 举报
回复
http://dev.csdn.net/author/fatalerror99/4f2b03d29e894d008c779da32848958e.html

Item 37: 绝不要重定义一个函数的 inherited default parameter value(通过继承得到的缺省参数值)
内容概要:本文围绕“新型电力系统下多分布式电源接入配电网承载力评估方法”的研究,系统性地介绍了基于Matlab的仿真建模与代码实现方案,旨在评估高比例分布式电源(如光伏、风电等)接入背景下配电网的接纳能力。研究融合了智能优化算法(如蜣螂优化、灰狼优化、遗传算法)、多目标优化、鲁棒优化及双层优化模型,结合潮流计算、稳定性分析与故障仿真,构建了完整的承载力评估体系。文档不仅提供核心算法实现,还拓展至微电网调度、储能配置、电氢耦合系统、电动汽车协同等前沿方向,强调“复现+创新”相结合的科研路径,助力研究者快速掌握高水平论文复现技巧并激发原创思路。; 适合人群:具备电力系统、自动化或相关专业背景,熟悉Matlab/Simulink仿真环境,正在从事科研或工程应用的研究生及初级科研人员(工作1-3年);; 使用场景及目标:①复现高水平期刊中关于配电网承载力的优化模型;②开展高比例可再生能源接入下的配电网规划与运行研究;③学习并应用智能优化算法解决复杂电力系统问题;④获取完整科研资源包以加速课题进展与论文撰写; 阅读建议:建议读者关注公众号“荔枝科研社”获取网盘资源,下载全套代码与模型文件,按照文档结构循序渐进学习,重点理解算法设计逻辑与仿真建模细节,结合所提供的复现案例深化对优化模型与工程应用场景的理解,提升科研效率与创新能力。

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧