C++ 虚函数
来源:互联网 发布:网络言论自由辩论 编辑:程序博客网 时间:2024/06/06 07:48
虚函数是面向对象程序设计中的一个重要的概念。只能适用于指针和参考的计算机工程运算。当从父类中继承的时候,虚函数和被继承的函数具有相同的签名。但是在运行过程中,运行系统将根据对象的类型,自动地选择适当的具体实现运行。虚函数是面向对象编程实现多态的基本手段。 ——维基百科
当我们使用基类的引用或指针调用基类中定义的一个函数时,我们并不知道该函数真正作用的对象是什么类型,因为它可能是一个基类的对象也可能是一个派生类的对象。如果该函数是虚函数,则直到运行时才会决定到底执行哪个版本,判断的一句是引用或指针所绑定的对象的真实类型。 ——《C++Primer》
也就是说虚函数在用指针或引用调用时 虚函数才有用
比如下面这个 没用到虚函数 可以正确调用 因为我们没有使用指针或者引用
#include <iostream>using namespace std;class A {public: void show_n() { cout << "This is class A" << endl; }};class B :public A {public: void show_n() { cout << "This is class B" << endl; }};int main(void){ A a; B b; a.show_n(); b.show_n();}如果用基类指针去调用
#include <iostream>using namespace std;class A {public:void show_n(){cout << "This is class A" << endl;}};class B :public A {public:void show_n() {cout << "This is class B" << endl;}};int main(void){A a;B b;A *pa = &a;pa->show_n();A *pb = &b;pb->show_n();}
上面代码的执行结果 会输出两个 “This is class A" 虽然我们的pb是指向b类的 但是依然调用了A类的 show_n();
用上虚函数 就可以按我们的意愿来了 像下面这样:
#include <iostream>using namespace std;class A {public:virtual void show_n(){cout << "This is class A" << endl;}};class B :public A {public:virtual void show_n() {cout << "This is class B" << endl;}};int main(void){A a;B b;A *pa = &a;pa->show_n();A *pb = &b;pb->show_n();}
输出的结果为 “This is class A" "This is class B"
0 0
- C/C++--虚函数
- 【C/C++】纯虚函数
- C/C++, 虚函数表
- C++:虚函数用途
- 虚函数详解(C++)
- 虚函数(C++)
- c++-->虚函数 2
- C++ 虚函数
- C++:虚函数
- C++_虚函数
- 【c++】虚函数
- 【C++】虚函数
- C++ 虚函数
- [C++]虚函数
- 虚函数 假多态 C++
- C/C++ 虚函数
- C++:虚函数理解
- C++---虚函数
- 程序员如何提升个人品牌
- Android-NDK入门续
- apache+tomcat集群配置
- 并发学习笔记(一):线程执行流程与synchronized关键字
- 贪心算法 田忌赛马(problem C)
- C++ 虚函数
- 解决Raspberry使用vim键盘布局问题
- 5.Servlet生成验证码和重定向实现
- JavaMelody监控Spring Service层和Spring Controller层
- 资料汇总
- Thread vs Runnable in Java
- handler中send和post方法的区别
- 继承
- 2016SDAU课程练习一1002 Problem C