程序员面试宝典-第七章-类的隐藏、覆盖
来源:互联网 发布:知乎都是医学生恋爱 编辑:程序博客网 时间:2024/05/16 04:48
成员函数被重载的特征
相同的范围(比如在同一个类中);
函数名字相同;
参数不同;
virtual 关键字可有可无。
覆盖的是指子类函数覆盖基类函数
在不同的类内(分别位于子类和父类)。
同名同参。
基类的函数名前必须有virtual关键字。
隐藏指派生类的函数隐藏了基类的同名函数
如果派生类函数与基类函数同名,但参数不同,无论基类函数前是否有virtual修饰,基类函数被隐。
如果派生类函数与基类函数同名,参数也相同,但是基类函数前无virtual修饰,基类函数被隐藏。
class Base{public: virtualvoid 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: virtualvoid 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; }};
Derived::f(float x)函数覆盖了基类Base::f(float x)函数。子父类同名同参,父类有virtual关键字
Derived::g(int x) 函数隐藏了基类Base::g(float x)函数。同名不同参,无论有无virtual修饰
Derived::f(float x)函数隐藏了基类Base::f(float x)函数。同名同参,且基类无virtulal修饰
#include<iostream>#include<string>using namespace std;class A{ public : A(){} void f(){cout<<'a'<<endl;} virtual void g(){cout<<"invoke aaa"<<endl;}};class B:public A{ public: B(){} virtual void g(){cout<<"invoke bbb"<<endl;} void f(){cout<<'b'<<endl;}};int main(){ A * a = new B; A * b = new A; B * c = new B; a->f(); b->f(); c->f(); cout<<"-------------------------"<<endl; a->g(); b->g(); c->g();}
结果是
a
a
b
invoke bbb
invoke aaa
invoke bbb
如果是隐藏的话 当你通过指针调用这个函数的时候,调用根据的是指针的类型
如果是覆盖的话 当你通过指针调用这个函数的时候,根据的是指针指向的类型
0 0
- 程序员面试宝典-第七章-类的隐藏、覆盖
- 程序员面试宝典-11.1 覆盖
- 程序员面试宝典第七章总结——指针与引用
- 程序员面试宝典(第四版)——读书笔记-3、第七章:指针与引用
- 单链表的操作(程序员面试宝典)
- 程序员面试宝典的一点笔记
- 【程序员面试宝典】栈的应用
- 《程序员面试笔试宝典》样章试读
- 程序员面试宝典 第1-8章
- 程序员面试宝典第九章总结
- 程序员面试宝典第五章 程序设计基本概念
- 程序员面试宝典第四版第五章
- Java程序员面试宝典:super类
- 22.c/c++程序员面试宝典-类
- 程序员面试宝典
- 程序员面试宝典A
- Java程序员面试宝典
- Java程序员面试宝典
- AutoCompleteTextView 和 MultiAutoCompleteTextView
- StrictMode介绍
- C#中的split函数用法详解
- 8位灰度图像BMP的保存
- (42)重定向到文件输入
- 程序员面试宝典-第七章-类的隐藏、覆盖
- 【计算机网络常见面试题】ip及掩码计算题
- 在这个步履匆匆的时代
- “梦想之城”大楼,来自建筑设计师Zaha Hadid
- centos下ping不通外网域名
- putty连接ubuntu的安装及使用
- Cocoa drawRect
- PLL模块使用中的一些错误
- java多线程总结(部分地方有误,参考原文下评论)