C++ 派生类覆盖重载基类函数
2024-09-05 01:24:47
派生类希望基类重载函数可见,情况有三种:
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)...
最新文章
- java--HashMap多线程并发问题分析
- zookeeper选举原理
- 使用 SVN Hook 实现服务器端代码自动更新
- MFC绘图(转载)
- POJ 1269 Intersecting Lines(计算几何)
- 【微信平台&;后台管理】第一个外包项目:XX科技城微信平台项目总结
- 【leetcode】13. Roman to Integer
- 1、C语言中的函数指针
- String 、InputStream、Reader 的转换
- tomcat https 配置
- oracle 大表删除数据后,回收空间的问题。
- 如何在Windows服务程序中读写HKEY_CURRENT_USER注册表
- oracle中的exists 和in
- Angularjs 实现移动端在线测评效果
- 探索Windows命令行系列(6):活用批处理解决实际问题
- Hello TensorFlow 二 (GPU)
- iOS-xcode代码统计
- 工厂模式讲解, 引入Spring IOC
- java获取文件行数
- linux环境下安装lnmp出现php安装失败
热门文章
- log4j打印抛出异常时堆栈内容
- scala练习题--万年历
- SpringMVC-方法四种类型返回值总结,你用过几种?
- 【题解】NOIP2015提高组 复赛
- 【LeetCode】230. Kth Smallest Element in a BST
- 【问题记录】ERROR 1045 (28000): Access denied for user &#39;root&#39;@&#39;localhost&#39; (using password: YES)
- DP之背包
- 英语chrysopal金绿宝石chrysopal单词
- django logger转载
- Mycat高可用解决方案一(mysql安装)