收录日期:2019/04/20 16:48:08 时间:2016/06/01 15:44:16 标签:C++ 语言
/*在阅读 <<高质量程序设计>> 中遇到的两个问题
15.2 成员函数的重载 覆盖 与隐藏 中的 一个问题?
我学C++不久, 才疏学浅. 
对于成员函数的重载 覆盖 与隐藏的理解是: 在被继承的子类中除非显式的声明, 否则子类只能调用本类的方法, 与父类毫无关系.
*/

#include <iostream.h>
class Base
{
public:
virtual void f(float x)  { cout << "Base::f(float) " << x << endl; }
void g(float x){ cout << "Base::g(float) " << x << endl; }
void h(float x){ cout << "Base::h(float) " << x << endl; }
};

class Derived : public Base
{
public:
virtual void f(float x){ cout << "Derived::f(float) " << x << endl; }
void g(int x){ cout << "Derived::g(int) " << x << endl; }
void h(float x){ cout << "Derived::h(float) " << x << endl; }
};

void main(void)
{
Derived  d;  // 我理解为: 声明了一个子类对象, 向上造型生成pb, 自身实现pd

Base *pb = &d;
Derived *pd = &d;
// Good : behavior depends solely on type of the object

pb->f(3.14f); // Derived::f(float) 3.14  父类对象用子类的方法来实现? :(  这句话我想不通
pd->f(3.14f); // Derived::f(float) 3.14
// Bad : behavior depends on type of the pointer

cout<<endl;
pb->g(3.14f); // Base::g(float) 3.14  就是父类的对象
pd->g(3.14f); // Derived::g(int) 3    (surprise!)
// Bad : behavior depends on type of the pointer

cout<<endl;
pb->h(3.14f); // Base::h(float) 3.14  (surprise!)  就是父类的对象
pd->h(3.14f); // Derived::h(float) 3.14 
}
//15.2.3  摆脱隐藏

#include <iostream.h>
void output( int x);
void output( int x, float y=0.0);

void output( int x)  // 函数A
{
cout << " output int " << x << endl ;
}

void output( int x, float y)  // 函数B
{
cout << " output int " << x << " and float " << y << endl ;
}

void main(void)
{ int x=1;
float y=0.5;

//  output(x); // error! ambiguous call  (形参个数1个, 类型int)我认只可能匹配函数A, 与函数B扯不上任何关系, 为何产生了二义性 :(
output(x,y); // output int 1 and float 0.5
}
void output( int x);
void output( int x, float y=0.0);这个函数产生了一个问题。就是使用output(x);时不知道y是没有值,还是使用y=0.0。你应该改改output的定义。
void output( int x);
void output( int x, float y=0.0);

这两个在使用的时候 如果都是传入的int参数 output(3),编译器就不知道你是想要它调用哪一个函数
pb->f(3.14f); // Derived::f(float) 3.14  父类对象用子类的方法来实现? :(  这句话我想不通

f定义为虚函数 pb指向的是子类对象 动态绑定噢! 自然调用的就是子类的方法了

推荐你一本书哎!《inside the c++ object model》很爽的 很多很晕的东东看了它就懂了
有没有第二版的下载地址啊??

大给分了,只求帮忙解决啊!! 一个入门级的问题,求教 componentone中的ActiveX拿到其他电脑上用regsvr32注册的问题!? 超难问题,牛人请进!解决立给分! exec(decrypt()) 存储过程加密的问题 大哥,大姐,又要麻烦你们了! message queue能否在internet上传输信息,还是只能在局域网内传输信息? 用java 对base64中文utf-8进行 base64 解码后最后一个字 变为 ? 问题 help 再问一下:怎样实现鼠标移到表格就变色《有原因》 急……关于ActiveX控件的下载问题 请问有没有支持oracle的数据字典生成工具 吐血求答呀! 北京国内大型企业招聘产品总监! 【基础】一张表里的两个字段有父子关系,做成树。请教算法! 使用JB9中的JTable,遇到N多困惑· gridview挑战性问题! 有没有人用过框架来做ASP文件包含呀 两个flash循环播放 重金寻赏!!,不够再给---对于字体font如何存储一个字符串? 该字符串取出之后如何转换成font...??? 怎样在cwebbrowser2里面显示一幅内存中的图片 高手都哪去了!着急呀! delphi数据插入正常却出现错误,为何 请教高手,如何实现添加和编辑网页内容的时候,有象WORD里面的那些功能,象插入、复制、连接,FLASH等等……功能按扭。 谁有GMAIL的邀请呀,送我一个吧,兄弟我有急用!!!!! 如何让控件随着窗口一同变化尺寸? Amateras找不到了~~~ 120!~~~ 电脑上网问题 函数参数的传值调用和引用调用 数据库高手进来帮一下忙