C++ 虚函数的两个例子
1. 第一个例子是朋友告诉我Qt中的某个实现
1 #include <iostream>
2
3 // Qt中的某个实现
4 class A{
5 public:
6 A() = default;
7 virtual ~A() = default;
8
9 virtual void add(){ std::cout << "A add" << std::endl; };
10
11 void print(){ this->add(); };
12 };
13
14 class B : public A{
15 public:
16 B() = default;
17
18 virtual void add(){ std::cout << "B add" << std::endl; }
19 };
20
21 int main(int argc, char **argv){
22 B b;
23 b.print(); // B add
24
25 return 0;
26 }
2. 第二个例子是我从SFML中看到的某个实现
1 #include <iostream>
2
3 // SFML中实现m_window.draw(b)
4 class A{
5 public:
6 A() = default;
7 virtual ~A() = default;
8
9 virtual void add() = 0;
10 };
11
12 class B : public A{
13 public:
14 B() = default;
15
16 private:
17 virtual void add(){ std::cout << "B add" << std::endl; }
18 };
19
20 void draw(A &a){
21 a.add();
22 }
23
24 int main(int argc, char **argv){
25 B b;
26
27 draw(b); // B add
28
29 return 0;
30 }
C++ 虚函数的两个例子的更多相关文章
- 你好,C++(37)上车的人请买票!6.3.3 用虚函数实现多态
6.3.3 用虚函数实现多态 在理解了面向对象的继承机制之后,我们知道了在大多数情况下派生类是基类的“一种”,就像“学生”是“人”类中的一种一样.既然“学生”是“人”的一种,那么在使用“人”这个概念 ...
- c++ virturn function -- 虚函数
c++ virturn function -- 虚函数 pure irtual function -- 纯虚函数 先看例子 #include <iostream> using nam ...
- C#语法-虚方法详解 Virtual 虚函数
虚方法 / Virtual 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享. ...
- C++虚函数与虚表
有一定面向对象知识的朋友对继承与多态一定很熟悉,C++想实现继承的话就要使用虚函数,那么什么是虚函数,其原理是什么,下面尽量给大家分析一下C++中其运行机制: 首先,基础,什么是虚函数,什么是多态? ...
- C++学习23 虚函数详解
虚函数对于多态具有决定性的作用,有虚函数才能构成多态.上节的例子中,你可能还未发现虚函数的用途,不妨来看下面的代码. #include <iostream> using namespace ...
- 从汇编层面深度剖析C++虚函数
文章出处:http://blog.csdn.net/linyt/article/details/6336762 虚函数是C++语言实现运行时多态的唯一手段,因此掌握C++虚函数也成为C++程序员是否合 ...
- C++中虚函数实现原理揭秘
编译器到底做了什么实现的虚函数的晚绑定呢?我们来探个究竟. 编译器对每个包含虚函数的类创建一个表(称为V TA B L E).在V TA B L E中,编译器放置特定类的虚函 ...
- 简单的自绘CListBox,重载虚MeasureItem和DrawItem这两个虚函数
[cpp] view plain copy //例如CNewListBox继承自CListBox,重载虚MeasureItem和DrawItem这两个虚函数,代码如下: void CNewListBo ...
- TControl的显示函数(5个非虚函数,4个虚函数)和三个例子的执行过程(包括SetParent的例子)
// 9个显示函数 procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); virtual; // 虚函数,important 根据父控 ...
随机推荐
- 如何查看和清除svn登录信息
切换svn登录用 点击clear,出现用户信息,勾选后点击ok 即清除 .下次访问svn需要重新登录
- shp2pgsql向postgresql导入shape数据
1. 准备好Shape文件(不仅仅是.shp文悠扬,还要有其他相关数据文件,包括.shx..prj..dbf文件). 2. 使用命令将Shape数据转换为*.sql文件 shp2pgsql -s 38 ...
- spring boot生成的war包运行时出现java.lang.NullPointerException: null
最近写了一个数据库同步的程序,见之前的博客,没有用到spring框架来集成,用的时纯Java代码.然后,项目经理要我把程序合到spring boot框架中,因为涉及到多数据源,时间又比较紧,同意我直接 ...
- View操作 swift
//创建View let view1 =UIView() let view2 =UIView(frame: CGRectMake(,, ,)) let view3 =UIView(frame: CGR ...
- JS Object.defineProperties()方法
JS Object.defineProperties()方法 描述: Object.defineProperties()方法为目标对象同时配置多个属性. 语法: Object.defineProper ...
- dubbo-2.5.6优雅停机研究
不优雅的停机: 当进程存在正在运行的线程时,如果直接执行kill -9 pid时,那么这个正在执行的线程被中断,就好像一个机器运行中突然遭遇断电的情况,所导致的结果是造成服务调用的消费端报错,也有可能 ...
- 如何在线更新visual studio installer2017
更新最后100M文件需要开启全局代理才能成功,不然需要等2个小时才能成功!墙太深了..
- java31
1.包装类 基本数据类型包装成对象,使基本数据类型的功能更加强大, 基本数据类型 包装类 byte Byte short Short int Integer long Long float Float ...
- GitHub 使用说明
GitHub使用教程 附件是Github 使用说明: GitHub使用说明.pdf 目录 1 注册帐户... 2 2 登录帐户... 2 3 创建仓库... 2 4 ...
- 在centos7上配置jenkins
在Linux(centos7)环境下配置jenkins,并用github作为仓库. 配置jenkins https://blog.csdn.net/wangfei0904306/article/det ...