派生类希望基类重载函数可见,情况有三种:

    a)派生类中覆盖某个版本,则某个版本可见,全部都覆盖重写,则全部版本可见。

    b)派生类中一个也不覆盖,则全部基类版本可见。

    c)派生类需要添加新的重载版本,同时又需要可见基类的重载版本,此时并不是必须全部覆盖重写全部版本。可在派生类中用using声明基类重载的函数。

      说明:对派生类没有重新定义的重载版本的访问实际上是对using声明点的访问。

两种注意点:

    a)指向派生类的基类指针或引用,不可调用派生类中的重载函数。

      原因:静态编译名字查找先于类型检查,在基类中找到同名函数,就不喊在派生类中继续找,而基类不存在目标调用形式的函数

    b)若不用using声明基类的重载版函数,派生类对象不可调用基类的重载版本。

      原因:派生类的函数,隐藏了基类的同名函数。

h----------------------
#ifndef DEMOCLASS_H
#define DEMOCLASS_H #include <iostream>
using namespace std; class DemoClass
{
public:
DemoClass();
void func(int);
void func(char);
}; class DerivedClass:public DemoClass
{
public:
using DemoClass::func;
void func(string);
}; #endif // DEMOCLASS_H cpp---------------------------
#include "democlass.h" DemoClass::DemoClass()
{
cout<<"construct..."<<endl;
} void DemoClass::func(int)
{
cout<<"DemoClass func(int)..."<<endl;
} void DemoClass::func(char)
{
cout<<"DemoClass func(char)..."<<endl;
} void DerivedClass::func(string)
{
cout<<"DerivedClass func(string)..."<<endl;
} main----------------------
#include <QCoreApplication>
#include "democlass.h" int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv); DemoClass *demo;
DerivedClass derived;
demo = &derived; cout<<"...Demo object that point to Derived access func..."<<endl;
demo->func();
demo->func('a'); cout<<endl<<"...derived object access func..."<<endl;
derived.func();
derived.func('a');
derived.func("abc");
return a.exec();
} 运行结果--------------------
construct...
...Demo object that point to Derived access func...
DemoClass func(int)...
DemoClass func(char)... ...derived object access func...
DemoClass func(int)...
DemoClass func(char)...
DerivedClass func(string)...

最新文章

  1. java--HashMap多线程并发问题分析
  2. zookeeper选举原理
  3. 使用 SVN Hook 实现服务器端代码自动更新
  4. MFC绘图(转载)
  5. POJ 1269 Intersecting Lines(计算几何)
  6. 【微信平台&amp;后台管理】第一个外包项目:XX科技城微信平台项目总结
  7. 【leetcode】13. Roman to Integer
  8. 1、C语言中的函数指针
  9. String 、InputStream、Reader 的转换
  10. tomcat https 配置
  11. oracle 大表删除数据后,回收空间的问题。
  12. 如何在Windows服务程序中读写HKEY_CURRENT_USER注册表
  13. oracle中的exists 和in
  14. Angularjs 实现移动端在线测评效果
  15. 探索Windows命令行系列(6):活用批处理解决实际问题
  16. Hello TensorFlow 二 (GPU)
  17. iOS-xcode代码统计
  18. 工厂模式讲解, 引入Spring IOC
  19. java获取文件行数
  20. linux环境下安装lnmp出现php安装失败

热门文章

  1. log4j打印抛出异常时堆栈内容
  2. scala练习题--万年历
  3. SpringMVC-方法四种类型返回值总结,你用过几种?
  4. 【题解】NOIP2015提高组 复赛
  5. 【LeetCode】230. Kth Smallest Element in a BST
  6. 【问题记录】ERROR 1045 (28000): Access denied for user &#39;root&#39;@&#39;localhost&#39; (using password: YES)
  7. DP之背包
  8. 英语chrysopal金绿宝石chrysopal单词
  9. django logger转载
  10. Mycat高可用解决方案一(mysql安装)