C++ 关于virtual
来源:互联网 发布:淘宝2016年交易规模 编辑:程序博客网 时间:2024/06/01 11:53
C++ 关于virtual
virtual的意义
C++代码里经常可以看到一些基类里的一些函数被定义为virtual,它的意义是什么呢?如果一个基类里的函数被定义为虚函数,就代表这个函数,在继承的时候希望派生类对其进行重写。
在书上看到了这些知识点之后,我做了这么一个测试,如下:
#include <iostream>using namespace std;class MyClass{public: int b = 100; int get() { return b; }};class Aaa :public MyClass{public: int a = 10; int get() { return a; }};int main(void){ Aaa aaa; MyClass bbb; cout << bbb.get() << endl; cout << aaa.get() << endl; getchar();}
运行结果是 100
10
然后如果我们给基类的get方法加上virtual修饰,如下:
class MyClass{public: int b = 100; virtual int get() { return b; }};
这个时候我们会发现一个问题,加不加virtual没有什么差别。
加不加virtual有差别吗?virtual在c++里面存在的意义是什么?
动态绑定
首先这里我们做这样一个测试,关于类的一些定义和声明都不做改动,但是把main改成如下:
void test(MyClass& a) { cout << a.get() << endl;}int main(void){ Aaa aaa; MyClass bbb; test(aaa); test(bbb); getchar();}
这个时候结果是 10
100
如果这个时候我们把基类里面的virtual声明去掉,这个时候结果会变成100 100
为什么会这样呢?这里就要引出一个C++里面的概念,叫动态绑定。
当C++中的基类指针或者引用调用虚函数的时候,就会发生动态绑定,此时调用的函数取决于指针以及引用实际指向的类(基类,及其各种派生类)中定义的方法。这里如果不把函数声明成虚函数的话就不会发生动态绑定,也就是说执行的方法全部为基类定义的方法。
到这里virtual的意义,我也就有了初步的一些理解,我的C++水平有限,如果里面有什么问题的话, 欢迎每一个看到问题的人指出我的问题。
0 0
- 关于C#:abstract,virtual
- 关于Virtual
- c++virtual
- 读书笔记(关于C#中的virtual 和 new)
- 关于 类的 virtual 实例 说明 (c#)
- BW:关于Virtual Provider
- 关于virtual虚函数
- 关于Virtual Memory
- 关于Virtual PC
- 关于虚拟Virtual DOM
- C++ 关于virtual
- 关于virtual interface
- [C/C++]关于C++类成员函数的重载、覆盖、隐藏与virtual关键字
- 关于Virtual继承及Virtual Table
- C++Virtual详解
- Virtual & Abstract (C++)
- C#virtual override new
- C++ virtual 继承
- usaco3.2.2 Stringsobits
- LFS编译时两个问题
- 四大主流BI工具比较
- 进程间通信之匿名管道通信
- 运行Thinking in Java里的codes
- C++ 关于virtual
- Aspose.World 操作使用教程
- redhat 6.3 64位安装中文输入法全过程记录
- C++的get()函数与getline()函数使用与比较
- js中sort()方法的用法,参数以及排序原理
- POJ 2407 Relatives 已翻译
- 联想拖拉机逆向之旅
- 高性能索引策略二
- USACO2014FebruaryGold Cow Decathlon