重载,覆盖,隐藏
来源:互联网 发布:鄂州翔天软件 编辑:程序博客网 时间:2024/06/05 07:32
关于重载,覆盖,隐藏的文章很多,有的也写的很好,我这就当重新温习下
1、在c++中,重载是一个类内部实现相同机制的成员函数,特征主要有:
1、在一个类中
2、重载的方法名称相同
3、参数不同(参数的类型,参数的个数),返回值无法确定其是否重载
4、virtual函数可有可无
一个经典的例子:
#include <stdio.h>#include <iostream>using namespace std;class algorithm{public: void add(int a, int b); void add(int a, int b, int c); void add(int a, double b); void add(double a, int b); void add(double a, double b); private: };void algorithm::add(int a, int b){ printf("int a+b :%d\r\n", a+b);}void algorithm::add(int a, int b, int c){ printf("int a+b+c: %d\r\n", a+b+c);}void algorithm::add(int a, double b){ printf("int a + double b : %lf\r\n", a+b);}void algorithm::add(double a, int b) { printf("double a + int b : %lf\r\n", a+b);}void algorithm::add(double a, double b){ printf("doubel a+double b :%lf\r\n", a+b);}int main(){ algorithm c; c.add(1, 2); c.add(1, 2, 3); c.add(1.1, 2); c.add(1, 2.2); c.add(1.1, 2.2); return 0;}
例子中对add进行了重载,既有参数类型不同的重载,也有参数个数不同的重载,还有参数顺序不同的重载。
2、覆盖
覆盖就是面向对象中的多态,通过多态针对同一行为,可以表现出不同的操作,是子类覆盖基类的方法。主要体现在:
1、是子类和父类的关系(派生类和基类)
2、函数名相同,并且参数相同
3、基类函数中要有virtual修饰
例子:
#include <iostream>#include <stdio.h>class animal{public: virtual void cry();};void animal::cry(){ printf("animal cry \r\n");}class dog :public animal{public: void cry();};void dog::cry(){ printf("dog cry \r\n");}int main(){ dog d; animal *a = &d; a->cry(); return 0;}
子类覆盖父类的方法
输出:dog cry
3、隐藏
隐藏是派生类屏蔽基类的同名函数,主要体现在:
1、如果派生类的函数和基类的函数同名,但是参数不同,这样不论基类函数是否有virtual,基类都将被隐藏
2、如果派生类的函数和基类的函数同名,并且参数也相同,但是基类中没有virtual修饰,基类也将被隐藏
例子:
#include <iostream>using namespace std;class animal{public : virtual void eat(double a); virtual void eat(double a, double b); };void animal::eat(double a){ cout<<"eat double a"<<endl;}void animal::eat(double a, double b){ cout<<"eat double a, double b"<<endl;}class dog : public animal{public : void eat(int a); };void dog::eat(int a){ cout<<"eat int a"<<endl;}int main(){ dog d; d.eat(1); d.eat(1.1,2.2); return 0;}
输出;
当只有d.eat(1),准确的输出该值,当加上d.eat(1.1,2.2),编译出现:
显示没有匹配函数,说明基类的函数隐藏了。
关于这方面的内容先到这。
0 0
- 重载、覆盖与隐藏
- 重载、覆盖与隐藏
- 重载、覆盖与隐藏
- 覆盖、重载、隐藏
- c++ 覆盖、重载、隐藏
- 重载,覆盖,隐藏
- 重载、覆盖与隐藏
- 重载、覆盖与隐藏
- 重载 覆盖 隐藏
- c++ 覆盖、重载、隐藏
- 覆盖,隐藏,重载
- 重载、覆盖、隐藏
- 重载 覆盖 隐藏
- c++ 覆盖、重载、隐藏
- c++ 覆盖、重载、隐藏
- 重载 ,覆盖,隐藏 区别
- 隐藏 重载和覆盖
- c++(重载、覆盖、隐藏)
- 机器学习13-支持向量机大边界的直观理解
- android native层的opengltest程序学习例子
- jsp的九大内置对象和四大作用域
- Node.js Buffer(缓冲区)
- 斐波那契博弈
- 重载,覆盖,隐藏
- java初学者集合类关系及注重事项
- 提高篇——复制字符串空格除外
- NYOJ 463
- Android网络访问之HttpURLConnection和HttpClient
- es6入门
- 使用python3操作access数据库(office2016环境)
- Android—启动内置APK和动态发送接收自定义广播
- 翻转链表