多态的覆盖(重写)
来源:互联网 发布:淘宝寄修手机靠谱吗 编辑:程序博客网 时间:2024/06/01 09:02
且看代码。
#include<iostream>using namespace std;class A{public: void SHOW() { cout<<"1"<<endl; } void PRINT() { cout<<"2"<<endl; } };class B:public A{public: void SHOW() { cout<<"3"<<endl; } void PRINT() { cout<<"4"<<endl; } };int main(){ A* P=new A(); P->SHOW(); P->PRINT(); delete P; cout<<endl; B* PP=new B(); PP->SHOW(); PP->PRINT(); delete PP; cout<<endl; //但很多时候会出现这样的东东。 A* PPP=new B();//基类指针指向子类对象 PPP->SHOW(); PPP->PRINT(); delete PPP;return 0;}
我们发现第三种情况的输出和第一种情况是一样的,那么第三种写法有什么作用呢?且看代码。
#include<iostream>using namespace std;class A{public: void SHOW() { cout<<"1"<<endl; } virtual void PRINT() { cout<<"2"<<endl; } };class B:public A{public: void SHOW() { cout<<"3"<<endl; } void PRINT() { cout<<"4"<<endl; } };int main(){ A* P=new A(); P->SHOW(); P->PRINT(); delete P; cout<<endl; B* PP=new B(); PP->SHOW(); PP->PRINT(); delete PP; cout<<endl; //但很多时候会出现这样的东东。 A* PPP=new B();//基类指针指向子类对象 PPP->SHOW(); PPP->PRINT(); delete PPP;return 0;}
只是将基类 PRINT函数设为虚函数,那么结果呢?
这样结果就变了。为什么呢?这就是多态的一个简单应用。
多态具体指什么呢?
一句话来说,多态是指允许子类类型的指针赋值给父类类型的指针。c++多态性是通过虚函数来实现的,而子类重新定义父类虚函数的做法,叫做覆盖或重写。覆盖指子类重新定义了基类的虚函数,函数名相同,参数相同;重载指子类重新定义了基类的函数,函数名相同,参数不相同(参数类型、参数个数)。上面的例子就是覆盖。
有人如是说:多态的覆盖主要是靠关键字virtual来实现的,这个关键字代表了一种叫“延迟绑定”的技术,当你用一个基类的指针或者引用来指向一个对象的时候,编译器在编译阶段是不知道绑定的对象是基类对象还是派生类对象的,直到运行期间才得知的。
1 0
- 多态的覆盖(重写)
- 重写(覆盖)重载与多态
- 方法的覆盖(重写)
- 重写、覆盖、重载、多态的区别的分析
- 重写、覆盖、重载、多态几个概念的区别分析
- 重写、覆盖、重载、多态几个概念的区别分析
- 重写、覆盖、重载、多态几个概念的区别分析
- 重写、覆盖、重载、多态几个概念的区别分析
- 重写、覆盖、重载、多态几个概念的区别分析
- 重写、覆盖、重载、多态几个概念的区别分析
- 重写、覆盖、重载、多态几个概念的区别分析 .
- 重写、覆盖、重载、多态几个概念的区别分析
- 重写、覆盖、重载、多态几个概念的区别分析
- 覆盖,重写,重载,隐藏,多态的区别
- 重写、覆盖、重载、多态几个概念的区别分析
- 重写、覆盖、重载、多态几个概念的区别分析
- 重写、覆盖、重载、多态几个概念的区别分析
- 重写、覆盖、重载、多态几个概念的区别分析
- 二值化
- 如何修改WAMP中mysql默认空密码&重新登录phpmyadmin
- CAS
- python题目2
- 收集的网址
- 多态的覆盖(重写)
- CNN卷积神经网络
- LINUX中system()函数详解
- 图的遍历方法(深度优先和广度优先算法)
- Tomcat监控xml ,当修改xml后,不用重启tomcat
- java中的复制文件
- 关于ListView中ViewHolder修饰符的问题
- 菜鸟学习OpenCV(Python)碰到的一些小问题
- stack smashing detected报错