C++中名字查找与继承.docVIP

  • 0
  • 0
  • 约4.54千字
  • 约 5页
  • 2018-01-10 发布于河南
  • 举报
C中名字查找与继承

C++调用成员函数的步骤一般为: (1) 首先确定函数调用的对象、引用或指针的静态类型。 (2) 在该类中查找函数,如果找不到就在直接基类中找,如此循环直到查找到最上层基类。 (3) 一旦找到了改名字就进行常规的参数类型检查。 (4) 假定函数调用是合法的,编译器就生成代码。如果函数是虚函数且通过引用或指针调用,则编译器生成代码以确定对象的动态类型运行哪个函数版本。 注意:名字查找发生在编译期(即使是虚函数调用),而且与参数检查是不同阶段。 如: class Base { public: void fun(){} }; class Derived:public Base { public: void fun(int a){} }; Derived d; d.fun();//调用出错,因为编译器首先找到的是Derived中的fun,所以不在查找,但是参数检查时发现类型不匹配。 对于通过基类指针或引用调用虚函数,同样编译器要在基类中查找函数名称,假定找到了函数名称,编译器就检查实参与形参是否匹配。这就是为什么虚函数必须在基类和派生类中拥有同一原型了。 名字冲突造成的覆盖问题 原则:如果基类和派生类使用相同名字的成员函数,在派生类作用域中派生类成员将屏蔽基类成员,即使函数原型不同,基类成员也会被屏蔽。 如: class Bas

文档评论(0)

1亿VIP精品文档

相关文档