天嵌 ARM开发社区

 找回密码
 注册
查看: 2167|回复: 0

C基础中如何摆脱隐藏

[复制链接]
happem 发表于 2012-9-12 15:20:12 | 显示全部楼层 |阅读模式
本帖最后由 happem 于 2012-9-12 15:20 编辑

隐藏规则引起了不少麻烦,下面我们举个简单的例如,让学员们一起看看,如果在此过程中还有不懂问题可以直接把问题发E-mail,答案会在网站嵌入式专题资讯公布,让学员一起交流与学习。例:

Class Base{

      Public:

     Void f(int x);

};

Class Derived:public Base{

Public:

  Void f(char*str);

};

Void Test(void)

{

Derived*pd=new Derived;

Pd->f(10);//error!

}

看来隐藏规则似乎很愚蠢,但是隐藏规则的存在至少有两个理由。

1.  写语句pd->f(10)的人可能真的想调用Derived::f(char*)函数,只是他误将参数写错了。有了隐藏规则,编译器就可以明确地指出错误,这未必不是好事,否则,编译器会静悄悄地将错就错,程序员将很难发现这个错误,于是留下祸根。

2.  假如类Derived有多个基类,有时搞不清楚那些基类定义了函数f,如果没有隐藏规则,那么pd->f(10)可能会调用个出乎意料的基类函数f(),尽管隐藏规则看起来不怎么有道理,但它的确能消除这些意外。

3.  如果语句pd->f(10)确实想调用函数Base::f(int),那么有两个办法:其一就是使用using声明,其二就是把类Derived修改如下样子:

Class Derived:public Base{

       Public:

          Void f(char*str);

          Void f(int x){Base::f(x);}  //调用传递

}
资料来源:http://www.lirenedu.org/index.php?ack=xinwen&id=1191
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号-2 )

GMT+8, 2024-6-26 16:36 , Processed in 1.015625 second(s), 18 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表