02 2017 档案
第九课、Qt之高级网络操作(HTTP/FTP快速上手)
摘要:一、 HTTP 的消息结构 一、 HTTP 的消息结构 一、 HTTP 的消息结构 1、Request (1)、请求行:Request 消息中的第一行,由请求方式、请求URL、HTTP协议及版本三部分组成 (2)、请求头:其中 Content-Type 指定了客户端发送的内容格式。例如:Conten
银行家算法------------------狄泰软件学院
摘要:恢复内容开始 一、银行家算法 1、问题描述 (1)、研究银行家如何将总数 一定的资金,安全 地借给若干个顾客,使顾客既能满足对资金的需求, 也使银行家可以收回自己的全部资金,不至于破产 2、以下限制条件 (1)、每个顾客在借款前必须提前说明所需资金总额 (2)、每次借钱都是以一个单位进行(如,一个单
第七十六课、多线程间的互斥(下)------------------狄泰软件学院
摘要:一、多线程间的互斥 1、程序的临界资源与线程锁的数量关系 (1)、一般性原则:每一个临界资源都需要一个线程锁进行保护 2、死锁的概念 (1)、线程间相互等待资源而造成彼此无法继承执行 3、发生死锁的条件 (1)、系统中存在多个临界资源且临界资源不可抢占(每次只有一个线程使用) (2)、线程需要多个临
第七十五课、多线程间的互斥(上)------------------狄泰软件学院
摘要:一、多线程间的互斥 1、生产消费者问题 (1)、有n个生产者同时制造产品,并把产品放入仓库中 (2)、有m个消费者同时从仓库中取出产品 (3)、规则 A、当仓库未满,任意生产者可以存入产品 B、当仓库未空,任意消费者可以取出产品 2、生活中的线程互斥例子 标示牌用于指示是否可用: 红绿灯标识十字路口
第七十四课、多线程间的同步------------------狄泰软件学院
摘要:一、多线程间的同步 1、多线程编程的本质 (1)、并发性是多线程编程的本质 (2)、在宏观上,所有线程并行执行 (3)、多个线程间相互独立,互不干涉 2、特殊情况下,多线程存在依赖 煮菜和煮饭这两个线程结束后,才能进行吃饭的线程 3、同步的概念 (1)、在特殊情况下,控制多线程间的相对执行顺序 (2
第七十三课、Qt中的多线程编程------------------狄泰软件学院
摘要:一、Qt中的多线程编程 1、Qt通过QThread直接支持多线程 (1)、QThread是一个跨平台的多线程解决方案 (2)、QThread以简洁易用的方式实现多线程编程 (3)、注意 A、Qt中的线程以对象的形式被创建和使用 B、每一个线程对应着一个QThread对象 2、QThread中的关键成
第七十二课、进程与线程的概念------------------狄泰软件学院
摘要:一、进程的概念 1、程序是计算机存储系统中的文件数据 (1)、源代码:文本文件,描述程序的行为和功能 (2)、可执行程序:二进制文件,直接加载并执行 2、进程的概念 (1)、广义概念:程序关于某个数据集合的运行活动 (2)、狭义概念:程序被加载到内存中执行后得到进程 3、程序和进程的区别 (1)、程
第五十三课、应用程序的打包与发布------------------狄泰软件学院
摘要:一、调试与发布 1、发布应用程序时的候选者 (1)、调试版(debug):开发阶段生成可执行程序 (2)、发布版(release):最终产品的可执行程序 2、调试版的可执行程序 (1)、包含调试相关的信息,体积巨大 (2)、执行速度慢,支持断点调试 3、发布版的可执行程序 (1)、无任何冗余信息,体
第五十二课、命令行参数的应用------------------狄泰软件学院
摘要:一、主窗口的状态参数 1、主窗口的状态参数 (1)、应用程序必须保存和恢复主窗口的状态参数(位置、大小等) 2、应用程序退出的过程 (1)、收到关闭事件 (2)、执行关闭事件处理函数 (3)、主窗口从屏幕上消失 (4)、主窗口的析构函数执行 3、一般而言 (1)、应用程序在收到关闭事件时进行状态参数
第五十一课、程序中的配置文件------------------狄泰软件学院
摘要:一、程序中的配置文件 1、应用程序在刚开始启动时都要一个初始化状态 (1)、一般而言:程序的初始状态是最近一次运行退出前的状态 2、保存和恢复程序状态的解决思路 (1)、程序退出前保存状态参数到文件(数据库) (2)、程序再次启动时读出状态参数并恢复 3、状态参数的存储方式 (1)、文本文件格式(X
第五十课、关于对话框(About)------------------狄泰软件学院
摘要:一、关于对话框 1、标准的桌面软件都有一个关于对话框 2、关于对话框用于标识软件的自身信息 (1)、软件的Logo、项目名、版本号 (2)、开发者信息 (3)、版权信息 (4)、联系方式等 3、经典设计方案 #ifndef ABOUTDIALOG_H #define ABOUTDIALOG_H #i
第四十九课、文本编辑器项目持续开发------------------狄泰软件学院
摘要:一、开发目标一:指定目标行号并跳转执行 1、用户需求 (1)、提示输入对话框 (2)、用户可输入目标行号 (3)、确定后光标跳转到指定行 2、行间跳转算法设计 (1)、通过输入对话框获取目标行号 (2)、查找换行符的位置计算目标行的第一个字符字符下标 (3)、通过QCursor定位到目标行 void
第四十八课、替换对话框的设计与实现------------------狄泰软件学院
摘要:一、替换对话框 1、替换对话框的需求分析 (1)、可复用软件部件 (2)、查找文本框中指定的字符 (3)、替换单个指定的字符 (4)、替换所有指定的字符 附加需求:点击关闭按钮后隐藏 2、替换对话框的设计与实现(继承自FindDialog) 3、替换对话框的界面布局 4、替换单个目标算法流程 5、M
第四十七课、Qt中的调色板------------------狄泰软件学院
摘要:一、Qt中的调色板 1、QPalette类包含了组件状态的颜色组 2、QPalette对象包含三个状态的颜色描述(即选择那个组件、不选中那个组件、禁用那个组件) (1)、激活颜色组(Active):组件获得焦点使用的颜色搭配方案 (2)、非激活颜色组(Inactive):组件失去焦点使用的颜色方案
第四十六课、查找对话框的功能实现------------------狄泰软件学院
摘要:一、查找功能的实现 1、文本查找功能的核心思想 (1)、获取当前光标的位置并作为起始点 (2)、向前(向后)查找目标第一次出现的位置 (3)、通过目标位置以及目标长度在文本框中进行标记 2、QString提供了子串查找的相关函数 (1)、indexOf:从指定位置向后查找目标子串下标位置 (2)、l
第四十五课、创建查找对话框------------------狄泰软件学院
摘要:一、查找对话框 1、查找对话框是应用程序中的常用部件 (1)、目标:开发一个可以在不同项目间复用的查找对话框 2、查找对话框的需求分析 (1)、可复用软件部件 (2)、查找文本框中指定字符串 (3)、能够指定查找方向 (4)、支持大小写敏感查找 (5)、附加:点击关闭按钮后隐藏 3、查找对话框的架构
第四十四课、发送自定义事件(下)------------------狄泰软件学院
摘要:一、自定义事件对象 1、Qt可以自定义新的事件类 (1)、自定义的事件类必须继承自QEvent (2)、自定义的事件类必须拥有全局唯一的Type值(event->type()可以获得事件的类型) (3)、程序中必须提供处理自定义事件的方法 2、自定义事件类 (1)、将QEvent作为父类继承 (2)
第四十三课、发送自定义事件(上)------------------狄泰软件学院
摘要:一、在程序中发送事件 1、Qt可以在程序中自主发送事件 (1)、堵塞型事件发送 A、事件发送完后需要等待事件处理完成 (2)、非堵塞型事件发送 A、事件发送后立即返回 B、事件被发送到事件队列中等待处理 2、QApplication类提供了支持事件发送的静态成员函数 3、注意事项 (1)、sendE
第四十二课、文本打印与光标定位------------------狄泰软件学院
摘要:一、文本编辑器中的打印 1、QPlainTextEdit内部的文档结构 (1)、QPlainTextEdit通过QTextDocument对象存储文本数据 (2)、QPlainTextEdit本身只负责界面形态的显示 (3)、QPlainTextEdit内部有指针指向下面两个类 2、QTextDoc
第四十一课、编辑交互功能的实现------------------狄泰软件学院
摘要:一、编辑交互功能 1、编辑器中常规的编辑交互功能 2、QPlainTextEdit提供了丰富的交互接口 3、信号与槽的连接 编辑器代码修改:将action触发的信号映射到QPlainTextEdit对象的槽函数 二、文本编辑器中的界面状态 1、不是任何时候都可以复制、粘贴、撤销、重做(比如开始没有数
第四十课、拖放事件深度剖析------------------狄泰软件学院
摘要:一、Qt中的拖放事件 1、拖放事件概述 (1)、拖放一个文件进入窗口将触发拖放事件 (2)、每一个QWidget对象都能处理拖放事件 (3)、拖放事件的函数为 2、拖放事件中的QMimeData (1)、QMimeData是Qt中的多媒体数据类 (2)、拖放事件通过QMimeData对象传递数据 (
第三十九课、Qt中的事件处理(下)------------------狄泰软件学院
摘要:一、Qt中事件处理的顺序 1、事件传递的过程 (1)、事件被组件对象处理后可能传递到其父组件对象 2、QEvent中的关键成员函数 #include "Widget.h" #include <QEvent> #include <QDebug> Widget::Widget(QWidget *pare
第三十八课、Qt中的事件处理(上)------------------狄泰软件学院
摘要:一、图形界面应用程序的消息处理模型 二、Qt的事件处理 1、Qt平台将系统产生的消息转换为Qt事件(每一个系统消息对象Qt平台的一个事件) (1)、Qt事件是一个QEvent的对象 (2)、Qt事件用于描述程序内部或者外部发生的动作 (3)、任意的QObject对象都具备事件处理的能力 2、GUI应
第三十七课、深度解析QMap与QHash------------------狄泰软件学院
摘要:一、QMap深度解析 1、QMap是一个以升序键顺序存储键值对的数据结构 (1)QMap原型为class QMap<K, T>模板 (2)、QMap中的键值对根据key进行了排序 (3)、QMap中的key类型必须重载operator < (小于操作符) 2、QMap使用实例一 3、QMap使用实例
第三十六课、文本编辑器中的功能交互------------------狄泰软件学院
摘要:一 、判断未保存的数据 1、QPlainTextEdit能够触发与编辑功能相关的信号 2、解决方案 (1)、定义槽函数void onTextChanged() (2)、映射textChanged()到槽函数 (3)、定义成员变量bool m_isTextChanged = false; (4)、当文
第三十五课、文本编辑器中的数据存取------------------狄泰软件学院
摘要:一、QAction的信号 1、QAction被点击之后会产生一个triggered信号 (1)、通过信号与槽的机制能够捕捉对QAction对象的操作 (2)、项目中可以将多个信号映射到同一个槽函数 二、文件的打开、保存、另存为操作 1、文件的打开操作 2、文件的保存操作 (1)、定义成员变量用于标记
第三十四课、缓冲区操作与目录操作------------------狄泰软件学院
摘要:一、缓冲区操作 1、Qt中缓冲区的概念 (1)、缓冲区的本质为一段连续的存储空间 (2)、QBuffer是qt中缓冲区相关的类 (3)、在Qt中可以将缓冲区看做是一种特殊的IO设备 (4)、文件流辅助类(上节课那些)可以直接用于操作缓冲区 2、QBuffer的使用方式 3、QBuffer缓冲区的使用
第三十三课、文件流和数据流------------------狄泰软件学院
摘要:一、文件类型 1、Qt中将文件类型分为两大类 (1)、文本文件:文件内容是可读的文本字符 (2)、数据文件:文件内容是直接的二进制数据 2、QFile直接支持文本文件和数据文件的读写 #include <QCoreApplication> #include <QFile> #include <QDe
第三十二课、Qt中的文件操作------------------狄泰软件学院
摘要:一、Qt中的IO操作 1、Qt中IO操作的处理方式 (1)、Qt通过统一的接口简化了文件与外部设备的操作方式 (2)、Qt中的文件被看做是一种特殊的外部设备 (3)、Qt中的文件操作与外部设备操作相同 2、IO操作中的关键函数接口 注意:IO操作的本质:连续存储空间的数据读写 3、Qt中IO设备类型
第三十一课、软件开发流程简介------------------狄泰软件学院
摘要:一. 软件开发流程 1、什么是软件开发流程 (1)、通过一系列步骤保证软件产品的顺利完成 (2)、软件产品在生命期内的管理方法学 2、软件开发流程的本质 (1)、开发流程与具体技术无关 (2)、开发流程是开发团队必须遵完的规则 3. 常见软件开发流程 (1)、即兴模型(Build-and-Fix M
第三十课、Qt中的文本编辑组件------------------狄泰软件学院
摘要:一、文本编辑组件 1、Qt支持三种常用的文本编辑组件 (1)、QLineEdit:单行文本编辑组件 (2)、QTextEdit:多行富文本(有图片、视频等)编辑组件 (3)、QPlainTextEdit:多行普通文本编辑组件 2、Qt中常用文本编辑组件的继承层次图 3、不同文本组件的特性比较 4、Q
第二十九课、主窗口中的状态栏------------------狄泰软件学院
摘要:一、主窗口中的状态栏 1、状态栏的概念和意义 (1)、状态栏是应用程序中输出简要信息的区域 (2)、状态栏一般位于主窗口的最底部 (3)、状态栏中的消息类型 A、实时消息:如当前程序状态 B、永久消息:如程序版本号,机构名称 C、进度消息:如进度条提示,百分百提示 2、Qt提供了与状态栏相关的类组件
第二十八课、主窗口中的工具栏------------------狄泰软件学院
摘要:一、主窗口中的工具栏 1、工具栏的概念和意义 (1)、应用程序中集成各种功能实现快捷键使用的一个区域 (2)、工具栏并不是应用程序中必须存在的组件 (3)、工具栏中的元素可以是各种窗口组件 (4)、工具栏的元素通常以图标按钮的方式存在 2、在Qt中提供与工具栏相关的类的组件 3、在Qt主窗口中创建工
第二十七课、应用程序中的主窗口------------------狄泰软件学院
摘要:一、主窗口的概念 1、应用程序中的主窗口 (1)、主窗口是与用户进行长时间交互的顶级窗口 (2)、程序的绝大多数功能直接由主窗口提供 (3)、主窗口通常是应用程序启动后显示的第一个窗口 (4)、整个程序由一个主窗口和多个对话框组成 2、Qt中的主窗口 (1)、Qt开发平台中直接支持主窗口的概念 (2
第二十六课、布局管理器综合实例------------------狄泰软件学院
摘要:一、需求分析 1、练习开发一个向导用户界面 (1)、在同一个界面上展示不同的向导页面 (2)、通过“上一步”和“下一步”按钮进行切换 (3)、不同页面上的元素组件和元素排布都不相同 (4)、页面中的组件通过布局管理器进行排布 二、解决方案 1、通过布局嵌套进行界面设计 2、通过QStackedLay
第二十五课、布局管理器(四)------------------狄泰软件学院
摘要:一、栈式布局管理器 1、栈式布局管理器(QStatckedLayout)概要 (1)、所有组件垂直于屏幕的方向上被管理 (2)、每次只有一个组件会显示在屏幕上 (3)、只有最顶层的组件会被最终显示 2、栈式布局管理器的特点 (1)、组件大小一致且充满父组件的显示区 (2)、不能直接嵌套其它布局管理器
第二十四课、布局管理器(三)------------------狄泰软件学院
摘要:一、如何实现下面的用户界面 1、解决方法 (1)、绝对定位组件的坐标和大小 (2)、嵌套QBoxLayout (3)、创建3x2的QGridLayout #ifndef WIDGET_H #define WIDGET_H #include <QtGui/QWidget> class Widget :
第二十三课、布局管理器(二)------------------狄泰软件学院
摘要:一、布局管理器的比例系数 1、默认情况下以等比例的方式更新组件的大小 2、可以自定义组件大小更新时的比例系数 3、QBoxLayout中的比例系数设置 4、注意:组件的初始化大小是独立于布局管理器设置的,因此不能保证组件的大小始终符合比例系数的设置(比如刚运行时一样大小,主窗口变大后差异才显现出来)
第二十二课、布局管理器(一)------------------狄泰软件学院
摘要:一、目前的GUI开发方式:绝对定位 1、直接在像素级指定各个组件的位置和大小 (1)、void Qwidget::move(int x, int y) (2)、void Qwidget::resize(int x, int y) 2、问题:组件的大小和位置无法自适应父窗口的变化 二、布局管理器 1、
第二十一课、Qt中的标准对话框(下)------------------狄泰软件学院
摘要:一、字体对话框 1、Qt提供了预定义的字体对话框QFontDialog类 2、QFontDialog类用于提供选择字体的对话框部件 3、字体对话框的使用方式 4、字体对话框中的实用函数 二、进度对话框 1、Qt提供了预定义的进度对话框QProgressDialog类 2、QProgressDialo
第二十课、Qt中的标准对话框(中)------------------狄泰软件学院
摘要:一、颜色对话框 1、Qt提供了预定义的颜色对话框QColorDialog类 2、QColorDialog类用于提供指定颜色的对话框部件 3、颜色对话框的使用方式 4、Qt中的QColor类用来在程序中表示颜色的概念 5、QColor类同时支持多种颜色的表示方式 (1)、RGB:以红绿蓝为基准的三色模
第十九课、Qt中的标准对话框(上)------------------狄泰软件学院
摘要:一、标准对话框 1、Qt为开发中提供了一下可复用的对话框类型 2、Qt提供的可复用对话框类型全部继承自QDialog类 3、Qt中的标准对话框遵循相同的使用方式 二、消息对话框 1、消息对话框是程序中最常用的界面元素 2、消息对话框主要用于 (1)、为用户提示重要信息 (2)、强制用户进行操作选择
第十八课、登录对话框实例分析------------------狄泰软件学院
摘要:一、登录对话框 1、登录对话框的需求分析 (1)、可复用软件部件(不同项目中都可以使用) (2)、获取用户名和密码 (3)、附加需求:随机验证码 2、登录对话框的架构与设计 3、获取用户名和密码及数据在两个不同对话框之间传递 (1)、通过附加的成员变量和成员函数完成不同对话框间的数据传递 #ifnd
第十七课、对话框及其类型------------------狄泰软件学院
摘要:一、对话框的概念 1、对话框是与用户进行简短交互的顶层窗口 2、QDialog是Qt中所有对话框窗口的基类 3、QDialog继承于QWidget是一种容器类型的组件 二、QDialog的意义 1、QDialog作为一种专用的交互窗口而存在 2、QDialog不能作为子部件嵌入到其它容器中 3、QD
第十六课、Qt对象间的父子关系------------------狄泰软件学院
摘要:一、Qt对象间的关系 1、Qt对象间可以存在父子关系 (1)、每个对象都保存有它所有子对象的指针 (2)、每一个对象都有一个指向其父对象的指针 2、当指定Qt对象的父对象时 (1)、其父对象会在子对象链表中加入该对象的指针 (2)、该对象会保存指向其父对象的指针 #include <QtCore/Q
第十五课、用户界面与业务逻辑的分离------------------狄泰软件学院
摘要:一、界面与逻辑 1、基本程序框架一般包括 (1)、用户界面模块(UI) A、接受用户输入及呈现数据 (2)、业务逻辑模块 A、根据用户需要处理数据 二、基本设计原则 1、功能模块之间需要进行解耦 2、核心思想:强内聚,弱耦合 (1)、每个模块应该只实现单一的功能 (2)、模块内部的子模块只为整体的单
第十四课、计算器核心解析算法(下)------------------狄泰软件学院
摘要:一、后缀表达式的计算 1、遍历后缀表达式中的数字和运算符 (1)、若当前元素为数字:进栈 (2)、当前元素为运算符: A、从栈中弹出右操作数 B、从栈中弹出左操作数 C、根据符号进行计算 D、将运算结果压入栈中 2、遍历结束 (1)、栈中的唯一数据为运算结果 3、注意: (1)、与数学相关的算法都需
第十三课、计算器核心解析算法(中)------------------狄泰软件学院
摘要:一、中缀转后缀 1、中缀表达式转后缀表达式的过程类似编译过程 (1)、四则运算表达式中的括号必须匹配 (2)、根据运算符优先级进行转换 (3)、转换后的表达式中没有括号 (4)、转换后可以顺序计算出最后结果 2、转换过程 (1)、当元素e为数字:输出 (2)、当元素e为运算符: A、与栈顶运算符进行
第十二课、计算器的核心解析算法(上)------------------狄泰软件学院
摘要:一、后缀表达式 1、人类习惯的数学表达式叫中缀表达式 2、另外,还有一种将运算符放在数字后面的表达式叫后缀表达式 2、中缀 or 后缀 (1)、中缀表达式符合人类的阅读和思维习惯 (2)、后缀表达式符合计算机的运算方式 A、消除了中缀表达式中的括号 B、同时保留了中缀表达式中的优先级 二、计算器的核
第十一课、Qt中的字符串类------------------狄泰软件学院
摘要:一、历史遗留的问题及解决方案 1、遗留的问题 (1)、C语言不支持真正意义上的字符串 (2)、C语言用字符数组和一组函数实现字符串操作 (3)、C语言不支持自定义类型,因此无法获得字符串类型 2、解决方案 (1)、从c到c++进化过程中引入了自定义类型 (2)、在c++中可以通过类来完成字符串的定义
第十课、初探Qt的消息处理------------------狄泰软件学院
摘要:一、Qt消息模型 1、Qt封装了具体操作系统的消息机制 2、Qt遵循经典的GUI消息驱动事件模型 二、信号与槽 1、Qt中定义了与系统消息相关的概念 (1)、信号(Signal):由操作系统产生的消息 (2)、槽(Slot):程序中的消息处理函数 (3)、连接(Connect):将系统消息绑定到消息
第九课、计算器界面代码重构------------------狄泰软件学院
摘要:一、重构的概念 1、重构是以改善代码质量为目的代码重写 (1)、使其软件的设计和架构更加合理 (2)、提高软件的扩展性和维护性 2、代码实现和代码重构的不同 (1)、代码实现:按照设计编程实现,重在实现功能 (2)、代码重构:以提高代码质量为目的软件架构优化 (3)、区别 A、代码实现时不考虑架构的
第八课、启航!第一个应用程序------------------狄泰软件学院
摘要:一、计算器程序界面设计 (1)、QLineEdit用于接收用户输入 (2)、QLineEdit能够获得用户输入的字符串 (3)、QLineEdit是功能性组件,需要父组件作为容器 (4)、QLineEdit能够在父组件中进行定位 二、界面的设计与实现 1、定义组件间的间隔 (1)、Space = 1
第七课、Qt中的坐标系统------------------狄泰软件学院
摘要:一、坐标系统 1、GUI操作系统都有特定的坐标系统 2、图形界面程序在坐标系统中进行窗口和部件的定位 3、定位类型 (1)、顶级窗口部件的定位 (2)、窗口内部件的定位 (3)、窗口部件大小的设置 4、Qt的坐标系统 (1)、Qt使用统一的坐标系统定位窗口部件的位置和大小 (2)、Qt部件类提供成员
第六课、窗口组件及窗口类型------------------狄泰软件学院
摘要:一、窗口组件 1、组件的介绍 (1)、图形用户界面由不同类型的窗口和窗口组件构成 (2)、<QtGui>头文件包含窗口组件,对应Qt中的GUI模块 (3)、Qt以组件对象的方式构建图形用户界面 (4)、组件的类型 A、容器类(父组件):用于包含其它的界面组件(Qt中没有父组件的顶级组件叫做窗口) B
第五课、Qt Creator 工程介绍------------------狄泰软件学院
摘要:一、Qt Creator 的管理方式 1、Qt Creator以工程项目的方式对源码进行管理 2、一个Qt Creator工程包含不同类型的文件 (1)、 .pro 项目描述文件 (2)、 .pro.user用户配置文件 (3)、 .h头文件 (4)、 .cpp 源文件 (5)、.ui 界面描述文件
第四课、Hello QT------------------狄泰软件学院
摘要:一、进入QT的世界 1、QT是什么 (1)、QT是一套跨平台的开发库 (2)、QT是一套c++集成开发环境 (3)、QT是一套开源的殿堂级架构技术教程 2、第一个QT程序 3、通过命令行的方式编译QT程序 (1)、启动QT命令行 (2)、进入源码所在的目录 (3)、命令 A、qmake -proje
第三课、Qt的诞生和本质------------------狄泰软件学院
摘要:一、GUI用户界面元素 (1)、GUI应用程序是由固定的窗口元素所构成 (2)、操作系统提供了创建用户界面元素所需要的函数 (3)、各自功能不同的函数依次调用,从而创建出界面元素 (4)、操作系统提供的元素函数无法直接映射到界面元素 二、面向对象的GUI应用程序设计 1、GUI应用程序的应用 (1)
第二课、GUI程序实例分析------------------狄泰软件学院
摘要:一、GUI应用程序的概述 1、现代操作系统支持GUI界面 (1)、现代操作系统提供原生SDK支持GUI程序开发 (2)、GUI程序开发是现代操作系统上的主流技术 (3)、不同操作系统上的GUI开发原理相同 (4)、不同操作系统上的GUI SDK不同 2、GUI应用程序开发原理 (1)、GUI应用程序
第一课、GUI程序原理分析------------------狄泰软件学院
摘要:一、命令行应用程序 1、命令行应用程序的特点(Command Line Interface) (1)、是一种基于顺序执行结构的可执行程序 (2)、程序运行过程中不需要与用户进行交互 (3)、程序执行后给出最终的运行结果 2、命令行应用程序的运行模式 (1)、特点:程序的运行有固定的开始和固定的结束
第六十八课、拾遗:令人迷惑的写法
摘要:一、 typename的前世今生 1、定义模板时使用class的历史原因 (1)、早期的C++直接复用class关键字来定义模板 (2)、但是泛型编程针对的不只是类类型 (3)、class关键字的复用使得代码出现二义性 2、typename诞生的直接诱因 (1)、自定义类类型内部的嵌套类型 (2)、
第六十七课、经典问题解析五
摘要:一、问题一:编写一个函数判断一个变量是不是指针 1、拾遗 (1)、c++中仍然支持C语言中的可变参数函数 (2)、c++编译器的匹配调用优先级:重载函数 >函数模板 >变参函数 2、思路 (1)、将变量分为两类:指针VS非指针 (2)、编写函数 A、指针变量调用返回true B、非指针变量调用时返回
第六十六课、c++中的类型识别
摘要:一、类型识别 1、在面向对象中可能出现下面的问题 (1)、基类指针指向子类对象 (2)、基类引用成为子类对象的别名 A、静态类型: 变量(对象)自身的类型(期望的、确定的类型) B、动态类型: 指针(引用)所指向实际对象的类型 2、解决方案 (1)、在类中定义虚函数返回具体类型的信息 (2)、所有的
第六十五课、c++中的异常处理(下)
摘要:一、catch语句中可以抛出异常 (1)、catch语句中抛出的异常需要外层的try...catch...捕获 (1)、catch中捕获的异常可以被重新解释后抛出 (2)、工程中使用这样的方式统一异常类型 二、类类型中的异常 1、异常的类型可以是自定义的类类型 2、对于类类型的异常匹配依旧是自上而下
第六十四课、c++中的异常处理(上)
摘要:一 、c++的异常处理 1、c++内置了异常处理语法元素try...catch (1)、try语句处理正常逻辑代码 (2)、catch处理异常情况 (3)、try语句中的异常由对应的catch语句处理 2、c++通过throw语句抛出异常信息 3、c++异常处理分析 (1)、throw抛出的异常必须
第六十三课、C语言的异常处理
摘要:一、异常处理 1、异常的概念 (1)、程序在运行过程中可能产生异常 (2)、异常(Exception)和Bug的区别 A、异常是程序运行时可预料的执行分支 B、Bug是程序中的错误,是不被预期的运行方式 2、异常(Exception)和Bug的对比 (1)异常 A、运行时产生除0的情况 B、需要打开
第六十二课、单例类模板
摘要:一、单例模式(一个类只有一个对象,且单例模式一般不用释放) 1、要控制类的对象数目,必须对外隐藏构造函数 (1)、将构造函数的访问属性设置为private (2)、定义instance并初始化为NULL (3)、当需要使用对象时,访问instance的值 A、空值:创建对象,并用instance标记
第六十一课、智能指针类模板
摘要:一、智能指针 1、智能指针的意义 (1)、现代c++开发库中最重要的类模板之一 (2)、c++中自动内存管理的重要手段 (3)、能够很大程度上避开内存相关的问题 2、STL中的只能指针auto_ptr (1)、生命周期结束时,销毁指向的内存空间 (2)、不能指向堆数组(否则发生内存泄漏),只能指向堆
第六十课、数组类模板
摘要:一、数值型参数(类型参数) 1、模板参数可以是数值型参数 2、数值型模板参数的限制 (1)、变量不能作为模板参数 (2)、浮点数不能作为模板参数 (3)、类对象不能作为模板参数 (4)、等等 3、数值型参数的本质 (1)、模板参数是在编译阶段被处理的单元,因此,在编译阶段必须准确无误唯一确定 用数组
第五十九课、类模板的深度剖析
摘要:一、多参数的类模板 1、类模板可以定义任意多个不同类型的参数 2、类模板可以被特化 (1)、指定类模板的特定实现 (2)、部分类型参数必须显示指定(如class Test<T, T> 就是现实指定T) (3)、根据类型参数分开实现类模板(同一个模板根据需要用不同方式来实现而已) (4)、类模板的特化
第五十八课、类模板的概念和意义
摘要:一、类模板概念及应用 1、类模板 (1)、一些类主要用于存储和组织数据 (2)、类中数据组织的方式和数据元素的具体类型无关 (3)、如数组类、链表类、Stack类、Queue类等 (4)、c++将模板的思想应用于类,使得类的实现不关注数据元素的具体类型,而只关注类所需要实现的具体功能 2、c++中的
第五十七课、深入理解函数模板
摘要:一、函数模板深入理解 1、编译器从函数模板通过具体类型产生不同的函数 2、编译器会对函数模板进行两次编译 (1)、对模板代码本身进行编译 (2)、对参数替换后的代码进行编译 3、函数模板本身不允许隐式类型转换 (1)、自动推导类型时,必须严格匹配 (2)、显示类型指定时,能够进行隐式类型转换 函数模
第五十六课、函数模板的概念和意义
摘要:一、交换变量的方法 1、定义宏代码块 (1)、优点:代码复用,适合所有的类型 (2)、缺点:编译器不知道宏在哪,缺少类型检查 2、定义函数 (1)、优点:真正的函数调用,编译器对类型进行检查 (2)、缺点:根据类型重复定义函数,无法代码复用 二、泛型编程与函数模板 1、泛型编程的概念:不考虑具体类型
第五十五课、经典问题解析四
摘要:一、new和malloc、delete和free之间的区别 1、new和malloc (1)、new关键字是c++的一部分 malloc是c库提供的函数 (2)、new是以具体类型为单位分配内存 malloc是以字节为单位分配内存 (3)、new在申请内存空间时可进行初始化 malloc仅根据需要申
第五十四课、被遗弃的多重继承(下)
摘要:一、多继承产生的问题三:可能产生多个虚函数表 二、正确使用多重继承:一些工程的建议 (1)、先继承自一个父类,然后实现多个多个接口 (2)、父类中提供equal()成员函数 (3)、equal()成员函数用于判断指针是否指向当前对象 (4)、与多重继承相关的强制类型转换用dynamic_cast完成
第五十三课、被遗弃的多重继承(上)
摘要:一、c++的多重继承 1、c++支持编写多重继承的代码 (1)、一个子类可以拥有多个父类 (2)、子类拥有所有父类的成员变量 (3)、子类继承所有父类的成员函数 (4)、子类对象可以当做任意父类对象使用 2、多重继承产生的问题一:通过多重继承得到的对象拥有不同的地址 二、多重继承产生的问题二:当多重
第五十二课、c++中的抽象类和接口
摘要:一、c++中的抽象类与纯虚函数 1、面向对象中抽象的概念 (1)、现实中需要知道具体图形的类型才能求面积 (2)、图形类只是概念上的类型,没有具体对象 2、面向对象中的抽象类 (1)、可用于表示现实世界中的抽象概念 (2)、是一种只能定义类型,而不能产生对象的类 (3)、只能被继承并重写相关的函数
第五十一课、c++对象模型分析(下)
摘要:一、继承的本质 1、在c++编译器的内部类可以理解为结构体 2、子类是由父类成员叠加子类新成员得到的 二、多态的本质 1、当类中声明一个虚函数时,编译器会在类中生成一个虚函数表 2、虚函数表是一个存储成员函数地址的数据结构 3、虚函数表是由编译器自动生成与维护的 4、virtual成员函数会被编译器
第五十课、c++对象模型分析(上)
摘要:一、c++对象模型之成员变量 1、class是一种特殊的struct (1)、在内存中class依旧可以看做是变量的集合 (2)、class与struct遵循相同的内存对齐规则 (3)、class中的成员函数和成员变量是分开存储的 A、每个对象有独立的成员变量 B、所有对象共享类中的成员函数 2、运
第四十九课、多态的概念和意义
摘要:一、多态初体验 1、函数重写的回顾 (1)、父类中被重写的函数依然会被继承给子类 (2)、子类中重写的函数将会覆盖父类中的函数 (3)、通过作用域分辨符(::)可以访问到父类中的函数 2、面向对象中期望的行为 (1)、根据实际对象的类型判断如何调用重写函数 (2)、若父类指针(引用)指向 A、指向父
第四十八课、同名覆盖引发的问题
摘要:一、子类对象可以当做父类对象使用(兼容性) 1、子类对象可以直接赋值给父类对象 2、子类对象可以直接初始化父类对象 3、父类指针可以直接指向子类对象 4、父类引用可以直接引用子类对象 5、当父类指针(引用)指向子类对象时: (1)、子类对象退化为父类对象 (2)、只能访问父类中定义的成员 (3)、可
第四十七课、父子间的冲突
摘要:一、父子间的冲突 1、子类可以定义父类中的同名成员变量 2、子类中的成员将隐藏父类中的同名成员 3、父类中的同名成员依然存在于子类中 4、通过作用域分辨符(::)访问父类中的同名成员 二、再论重载 1、类中的成员函数可以重载 (1)、重载函数的本质为多个不同的函数 (2)、函数名和参数列表是唯一的标
第四十六课、继承中的构造与析构
摘要:一、子类对象的构造方法 1、子类中可以定义构造函数 2、子类构造函数:必须对继承来的成员进行初始化 (1)、直接通过初始化列表或者赋值方式进行初始化(但可能继承来的是private成员) (2)、调用父类构造函数进行初始化 A、默认调用:适用于无参构造函数和使用默认参数的构造函数 B、显示调用:通过
第四十五课、不同的继承方式
摘要:一、c++中的三种不同继承方式 1、public继承 (1)、父类成员在子类中保持原有的访问级别 2、protected继承 (1)、父类中的公有成员变成保护成员,其它成员保持不变 3、private继承 (1)、父类成员在子类中变成私有成员 二、遗憾的事实 1、一般而言,c++工程项目中只使用pu
第四十四课、继承中的访问级别
摘要:一、一个令人疑惑的问题 二、面向对象中的访问级别 1、面向对象中的访问级别不只是public和private 2、可以定义protected的访问级别 3、关键字protected的意义 (1)、修饰的成员不能被外界直接访问 (2)、修饰的成员可以被子类直接访问 三、定义类时访问级别的选择 四、综合
第四十三课、继承的概念和意义
摘要:恢复内容开始 一、类间的组合关系:整体与局部关系 1、将其他类的对象作为当前类的成员使用2、当前类的对象与成员对象的生命周期相同3、成员对象在用法上与普通对象完全一致 二、类的继承关系:父子关系 1、子类拥有父类的所有属性和行为2、子类就是一种特殊的父类3、子类对象可以当父类对象使用4、子类中可以添
第四十二课、类型转换函数(下)
摘要:一、类型转换函数 1、c++类中可以定义类型转换函数 2、类型转换函数用于将类对象转化为其它类型 3、语法规则: 4、类型转换函数与转换构造函数具有同等的地位 5、类型转换函数使得编译器有能力将类类型转换为其它类型 6、编译器能够隐式使用类型转换函数 二、类类型之间的转换 三、避免类型转换函数进行隐
第四十一课、类型转化构造函数(上)
摘要:一、C语言中的类型转换 1、标准数据类型之间会进行隐式的类型安全转换2、转换规则如下 3、由此可知,如果是小类型转到大类型,C语言是支持隐式转换,是安全的 二、再论构造函数 1、构造函数可以定义不同类型的参数2、参数满足下列条件时称为转换构造函数(1)、有且仅有一个参数(2)、参数是基本类型(3)、
第四十课、前置操作符和后置操作符------------------狄泰软件学院
摘要:一、i++和++i有没有区别? 1.现代编译器产品会对代码进行优化 2.优化使得最终二进制程序更加高效 3.优化后的二进制程序丢失了c/c++的原生语义 4.不可能从编译后的二进制程序还原c/c++程序 二、++操作符的重载 1、全局函数和成员函数均可进行重载 2、重载前置++操作符不需要额外的参数