VC++ 2005:基础概览 讲师:李建忠 上海祝成科技 高级讲师.

Slides:



Advertisements
Similar presentations
如何準備社工師考試 講 師:張雅惠 社工師 演講日期:
Advertisements

LSF系统介绍 张焕杰 中国科学技术大学网络信息中心
如何做好財金人職涯規劃 演講者:張志豐
2017年9月14日12时3分 DEV349 Visual C 无缝集成,无限潜力 李建忠 微软特约讲师 上海祝成科技
Using C++ The Weird Way Something about c++11 & OOP tricks
第一章 認識Visual C 環境架構 1-1 認識Visual C Visual Studio 概觀
LSF系统介绍 张焕杰 中国科学技术大学网络信息中心
走向C++之路 WindyWinter WindyWinter感谢诸位前来捧场。
資料大樓 --談指標與陣列 綠園.
南华大学计算机学院 软件工程系 QQ讨论群:
教材 《C++程序设计》.谭浩强. 清华大学出版社 王雪晶
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
C++ with Managed Extensions
基于 C# 的 .NET Framework 程序设计
C++语言程序设计 C++语言程序设计 第四章 数组及自定义数据类型 C++语言程序设计.
C#程序设计基础 $3 成员、变量和常量.
鄭士康 國立台灣大學 電機工程學系/電信工程研究所/ 資訊網路與多媒體研究所
管理信息结构SMI.
辅导课程六.
C#面向对象程序设计 $7 继承和多态性.
Zhao4zhong1 (赵中) C语言指针与汇编语言地址.
Zhao4zhong1 (赵中) C语言指针与汇编语言地址.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
第五讲 四则运算计算器(一) 精品教程《C#程序设计与应用(第2版)清华大学出版社 谭恒松 主编
谭浩强 编著 中国高等院校计算机基础教育课程体系规划教材 C++程序设计.
C/C++/Java 哪些值不是头等程序对象
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
第七章 操作符重载 胡昊 南京大学计算机系软件所.
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
程序设计工具实习 Software Program Tool
面向对象 程序设计语言基础 马骏
劉崇汎 崑山科技大學 電腦與通訊系 DLL的建立與引用 劉崇汎 崑山科技大學 電腦與通訊系
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C++大学基础教程 第11章 多态性 北京科技大学 信息基础科学系 2019/4/8 北京科技大学.
C语言程序设计 主讲教师:陆幼利.
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
$9 泛型基础.
C#程序设计基础 $3 成员、变量和常量.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
Aspect Oriented Programming
实验七 安全FTP服务器实验 2019/4/28.
物件導向程式設計 CH2.
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
第11章 從C到C++語言 11-1 C++語言的基礎 11-2 C++語言的資料型態與運算子 11-3 C++語言的輸出與輸入
學生學習檔案製作經驗分享 國際貿易實務課程研習 -- 多元升學與技能證照 2010 /04 /30 台中家商
第4章 Excel电子表格制作软件 4.4 函数(一).
_08文件的基本操作 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计.
C++大学基础教程 第10章 运算符重载 北京科技大学 2019/5/7 北京科技大学.
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
C/C++基礎程式設計班 C++: 物件的使用、參考、重載函式 講師:林業峻 CSIE, NTU 3/28, 2015.
#include <iostream.h>
C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计.
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
_03宽字符与Unicode编程 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
本节内容 Windows线程切换_时钟中断切换 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
C++语言程序设计 C++语言程序设计 第十章 多态 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
基于列存储的RDF数据管理 朱敏
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
本节内容 动态链接库 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
本节内容 进程 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
C++语言程序设计 C++语言程序设计 第十一章 异常处理 C++语言程序设计.
FVX1100介绍 法视特(上海)图像科技有限公司 施 俊.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
Presentation transcript:

VC++ 2005:基础概览 讲师:李建忠 上海祝成科技 高级讲师

Agenda 第一个C++/CLI程序 栈对象语义的变化 通用语言基础构造CLI ISO-C++与CLI的集成 讲座总结 Q&A

Hello,World! using namespace System; int main() { String^ msg =gcnew String("Hello, World!"); Console::WriteLine(text); }

追踪句柄^ VS. 指针* String^ msg; //C++/CLI版 string * pMsg; //ISO-C++版

gcnew VS. new msg=gcnew String("Hello, World!"); pMsg=new string("Hello, World!"); delete msg ? //仅仅用来调用析构函数以释放非托管资源,托管内存资源交由垃圾收集器负责(调用可选) delete pMsg // 不仅用来调用析构函数,同时也用来施放对象内存(必须调用,否则造成内存泄漏)

托管堆 VS. 本地堆 托管堆-垃圾收集自动服务 本地堆-程序员自己负责 托管堆由于垃圾收集服务的介入,影响了对象地址的稳定性,大大改变了对象模型

编译结果分析 通用中间语言(CIL) 元数据(Metadata) CIL与Metadata都是在软件体系结构中增加了一层间接(indirection)来实现一种抽象(abstract),从而对系统做更高层次的演绎和拓展

Agenda 第一个C++/CLI程序 栈对象语义的变化 通用语言基础构造CLI ISO-C++与CLI的集成 讲座总结 Q&A

定义一个类型 ref class MyClass{ public: MyClass(){ Console::WriteLine("ctor"); } ~MyClass(){ Console::WriteLine("dtor"); };

栈对象的分配 MyClass myObject; 在ISO-C++中,myObject被分配于栈上 在C++/CLI中,myObject的分配依赖于类型系统。值类型(value class):分配在栈上,引用类型(ref class):分配在托管堆上

栈对象的消亡 在ISO-C++中,在清空栈空间时,会自动调用MyClass的析构函数,并且myObject在栈上的空间也随之被释放 在C++/CLI中,在清空栈空间时,也会自动调用MyClass的析构函数,但myObject要视MyClass的类型来定,如果是value class,那么其空间会随之被释放;如果是ref class,那么其在托管堆上的内存要交给垃圾收集器来处理

栈对象的地址运算 在ISO-C++中: 在C++/CLI中: MyClass* pMyObject=&myObject; (*pMyObject).MyMethod();//解引用 在C++/CLI中: MyClass^ pMyObject=%myObject; (*pMyObject).MyMethod(); //解引用

Agenda 第一个C++/CLI程序 栈对象语义的变化 通用语言基础构造CLI ISO-C++与CLI的集成 讲座总结 Q&A

CLI是什么? CLI全称为通用语言基础构造(Common Language Infrastructure) CLI是一个虚拟机平台 CLI同样是增加了一层间接(indirection)来实现一种抽象(abstract),它定义了一个介于操作系统和应用程序软件之间的组件平台

CLI的组成部分 通用类型系统(Common Type System,简称CTS) 元数据 (Metadata) 通用语言规范(Common Language Specification,简称CLS) 虚拟执行系统(Virtual Execution System,简称VES) 其他:如可移植文件(portable file)格式,通用中间语言指令集,标准编程框

通用类型系统(CTS) 类型规范 任何一门CLI编程语言中提供的类型和成员都是CTS的一个子集 C++/CLI是目前对CTS描述最为完整的高级语言

元数据 (Metadata) 元数据是CLI组件平台的灵魂 元数据赋予了无限的组件管理、服务、动态能力 C++/CLI与ISO-C++的本质区别就在于对元数据的支持

通用语言规范(CLS) CLS是用以确保所有CLI语言能够互操作的一组规则 它定义了所有CLI语言都必须支持的一个最小功能集(一个CTS的子集) 各CLI语言可以选择自己对CTS的一部分的映射,但是它至少应该支持CLS所定义的最小功能集

虚拟执行系统(VES) VES为CLI程序提供了一个在各种可能的平台上加载和执行托管代码(即通用中间语言指令集)的虚拟机环境。 VES实现并贯彻了CTS模型 VES定义了一个相关的机器模型和状态、一组控制流构造,以及一个异常处理模型

Agenda 第一个C++/CLI程序 栈对象语义的变化 通用语言基础构造CLI ISO-C++与CLI的集成 讲座总结 Q&A

何为集成? C++/CLI支持对本地编程和托管编程的无缝集成 集成不是简单混合,而是对象模型的集成

最简单的集成 直接使用cl /clr 编译即可 #include <iostream> #include <string> using namespace std; int main(){ string msg="Hello, World!"; cout<<msg; } 直接使用cl /clr 编译即可

IJW(it just works) 绝大多数ISO-C++代码编译后将得到托管代码,即IL代码。部分不能编译为IL代码的采用P/Invoke调用实现 代码托管,但数据并不托管——原来ISO-C++中本地堆内的数据仍位于本地堆中

更有价值的集成 #include "TextQuery.h" public ref class TextQueryCLI { TextQuery *pquery; public: TextQueryNet() : pquery( new TextQuery()){} ~TextQueryNet(){ delete pquery; } void query_text() { pquery->query_text(); } void build_up_text() { pquery->build_up_text();} };

更深层次的集成(1) 在一个托管类中包含本地对象 ref class ManagedClass{ NativeClass nObject; };

更深层次的集成(2) 在一个本地类中包含托管对象 class NativeClass{ ManagedClass mObject; };

更深层次的集成(3) 将一个本地对象放在托管堆中 NativeClass^ nObject = gcnew NativeClass;

更深层次的集成(4) 将一个托管对象放在本地堆中 ManagedClass* pmObject = new ManagedClass;

Agenda 第一个C++/CLI程序 栈对象语义的变化 通用语言基础构造CLI ISO-C++与CLI的集成 讲座总结 Q&A

讲座总结 以史为鉴,可以知兴替 从小处着手,建立清晰的程序观念 从大处着眼,建立宏观的知识体系 良好的ISO-C++基础很重要

Agenda 第一个C++/CLI程序 栈对象语义的变化 通用语言基础构造CLI ISO-C++与CLI的集成 讲座总结 Q&A

Q & A

资源链接 msdn.microsoft.com/visualc comp.lang.c++.moderated blogs.msdn.com/slippman pluralsight.com/blogs/hsutter blog.joycode.com/lijianzhong www.chinaitclub.org/forums/