C++该函数隐藏
只有基类成员函数的定义已声明virtualkeyword,当在派生类中的时间,以支付功能实现,virtualkeyword可以从时间被添加以增加。它不影响多状态。
easy混淆视听,掩盖:
,规则例如以下:
1) 假设派生类的函数与基类的函数同名,可是參数不同。
此时,不论有无virtualkeyword,基类的函数将被隐藏(注意别与重载混淆)。
2) 假设派生类的函数与基类的函数同名。而且參数也同样,可是基类函数没有virtualkeyword。
此时,基类的函数被隐藏(注意这样的情况与函数重载的差别,重载发生在同一个类中。
)。
#include<iostream>
using namespace std; class Base
{
public:
virtual void f(float x)
{
cout<<"BASE::f"<<x;
}
virtual void g(float x)
{
cout<<"BASE::g"<<x;
}
void h(float x)
{
cout<<"BASE::h"<<x;
}
};
class Driver:public Base
{
public:
void f(float x)
{
cout<<"d::f"<<x;
}
virtual void g(int x)
{
cout<<"d::g"<<x;
}
void h(float x)
{ cout<<"d::h"<<x;
}
}; int main(int argc, char const *argv[])
{
Driver d;
Base* pb=&d;
Driver* pd=&d;
pd->f(1.2f);
pb->f(1.2f);
pd->g(1.2f);
pb->g(1.2f);
pd->h(1.2f);
pb->h(1.2f);
return 0; }
请大家注意,f()函数属于覆盖,而g()与h()属于隐藏。从上面的运行结果,我们能够注意到在覆盖中。用基类指针和派生类指针调用函数f()时。系统都是运行的派生类函数f(),而非基类的f()。而在隐藏方式中,用基类指针和派生类指针调用函数g()、h()时,系统会进行区分,基类指针调用时,系统运行基类的g()、h(),而派生类指针调用时,系统“隐藏”了基类的f(),运行派生类f(),这是“藏”起源。
版权声明:本文博主原创文章,博客,未经同意不得转载。
C++该函数隐藏的更多相关文章
- C++中一个函数隐藏的有趣例子
函数隐藏是一个函数的定义或声明导致其他一些函数不可见. 函数A隐藏函数B的条件: 1. 两个函数具有相同的函数名称 2. 具有不同的作用域.所谓定义域函数定义或声明的位置,如全局作 ...
- C++继承具体解释之二——派生类成员函数具体解释(函数隐藏、构造函数与兼容覆盖规则)
在这一篇文章開始之前.我先解决一个问题. 在上一篇C++继承详解之中的一个--初探继承中,我提到了在派生类中能够定义一个与基类成员函数同名的函数,这样派生类中的函数就会覆盖掉基类的成员函数. 在谭浩强 ...
- msyql round函数隐藏问题
1.背景 在用mysql round进行四舍五入计算的时候如果参与计算的字段为float,则最终计算出的四舍五入效果会有很大出入.例子我就不列举了 2.原因 mysql官方文档中关于ROUND函数的部 ...
- 函数隐藏参数 — this
解析器在调用函数每次都会向函数内部传递一个隐含的参数,这个隐含的参数就是this this指向的是一个对象,这个对象我们成为函数执行的上下文对象 根据函数的调用方式不用,this会指向不同的对象: 1 ...
- C++中的重载,隐藏,覆盖,虚函数,多态浅析
直到今日,才发现自己对重载的认识长时间以来都是错误的.幸亏现在得以纠正,真的是恐怖万分,雷人至极.一直以来,我认为重载可以发生在基类和派生类之间,例如: class A { public: void ...
- C++基础:虚函数、重载、覆盖、隐藏<转>
转自:http://www.2cto.com/kf/201404/291772.html 虚函数总是跟多态联系在一起,引入虚函数可以使用基类指针对继承类对象进行操作! 虚函数:继承接口(函数名,参数, ...
- C++函数的重载,覆盖和隐藏(——高质量编程第14章)
函数重载概念 只有C++才有重载的概念,C语言没有. 靠行参列表的不同来区别不同的重载函数, 若是全局函数和成员函数同名时,不算重载,因为它们的作用域不同,所以成员函数会将全局函数给隐藏(遮蔽)了 ...
- 【转】C++函数的重载、覆盖和隐藏区别
网上看到的关于C++函数的重载.覆盖和隐藏区别的回答,如下(其内容来源于C++面试宝典中一道题目): a.成员函数被重载的特征:(1)相同的范围(在同一个类中):(2)函数名字相同:(3)参数不同:( ...
- C++类中的一些细节(重载、重写、覆盖、隐藏,构造函数、析构函数、拷贝构造函数、赋值函数在继承时的一些问题)
1 函数的重载.重写(重定义).函数覆盖及隐藏 其实函数重载与函数重写.函数覆盖和函数隐藏不是一个层面上的概念.前者是同一个类内,或者同一个函数作用域内,同名不同参数列表的函数之间的关系.而后三者是基 ...
随机推荐
- Java文件压缩分割(待)
http://blog.csdn.net/ycg01/article/details/1366648
- js实现的侧边栏展开收缩效果
原文地址:http://www.softwhy.com/forum.php?mod=viewthread&tid=12246 <!DOCTYPE html> <html> ...
- Java Executor 框架
Java Executor 框架 Executor框架是指java5中引入的一系列并发库中与executor相关的功能类,包括Executor.Executors. ExecutorService.C ...
- python几道简单的算法题
最近看了python的语法,但是总感觉不知道怎么使用它,还是先来敲敲一些简单的程序吧. 1.题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 程序分析:可填在百位.十 ...
- Just like normal variables,
Just like normal variables, pointers can be declared constant. There are two different ways that poi ...
- HDOJ 2665 Kth number
静态区间第K小....划分树裸题 Kth number Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K ( ...
- 索尼 LT26I刷机包 X.I.D 增加官方风格 GF A3.9.4 各方面完美
ROM介 FX_GF_A系列是具有官方风格的.稳定的.流畅的.省电的.新功能体验的.最悦耳音效体验的ROM. FX_GF_A更新日志 ☆ GF_3.9.4 更新信息 ☆ 更新播放器 ☆ 更新adsp数 ...
- bootstrap的popover在trigger设置为hover时不隐藏popover
使用bootstrap的popover,trigger设置为hover时,可以实现当鼠标放置到目标元素上时显示popover,可是无法实现当鼠标移动到popover上时不隐藏popover,在网上找了 ...
- doc-remote-debugging.html
https://studio.zerobrane.com/doc-remote-debugging.html
- leetcode先刷_Climbing Stairs
水的问题. 以为很常见.青蛙跳楼梯.能跳一步可以跳两步,它实际上是一个斐波那契数. 注意.空间O(1). class Solution { public: int climbStairs(int n) ...