=================================版权声明=================================

版权声明:本文为博主原创文章 未经许可不得转载 

请通过右侧公告中的“联系邮箱(wlsandwho@foxmail.com)”联系我

未经作者授权勿用于学术性引用。

未经作者授权勿用于商业出版、商业印刷、商业引用以及其他商业用途。                

本文不定期修正完善,为保证内容正确,建议移步原文处阅读。                                                               <--------总有一天我要自己做一个模板干掉这只土豆

本文链接:http://www.cnblogs.com/wlsandwho/p/4700397.html

耻辱墙:http://www.cnblogs.com/wlsandwho/p/4206472.html

=======================================================================

其实之前并没有学习C++/CLI的想法,但是最近用SQL Server的时候,感收到了来自大宇宙的深深恶意,哦不,是MS的。

CLI集成功能,对于某些情况下还是有用的,然而VC++并不太受待见。(SQL Server已不赞成使用扩展程序集。Dog my cats.)

这样一来,由于崇高的C++信仰,我只能折中的选用C++/CLI并在其中调用标准C++的DLL——如此一来只要学一部分就行了,

看起来进可攻退可守的样子。

从“MASM/内联汇编”到“C/C++”再到“C++/CLI”,基本上没什么大问题。

=======================================================================

一边看一遍写 看不完就不写了。

=======================================================================

这本书开篇很有意思,“现在没有‘Hello World’应用程序”都不好意说这是一本讲编程的书。”

=======================================================================

第一章 Hello C++
与 Hello World 的差别:

  使用的是using namespace System;没加添加 iostream和using namespace std;

  输出用的是Console::WriteLine()不是cout<<。

=======================================================================

第二章 面向对象编程基础

与C++类的差别:

  class之前多了个修饰词

    ref  引用类型  指向对象内存位置的指针/句柄  CLR堆  慢

    value  值类型  就是对象本身          栈    快

(第二章没有解释 ^ 符号,可能是个包袱。)

=======================================================================

第三章 变量和操作符

与C++的差别

  基本数据类型

    C++    类型字节数大小平台相关

    C++/cLI          由.net平台决定

  类型转换

    C++    (double)600/3

    C++/CLI  double(600)/3//这个不算吧

          支持C风格、C++风格和自己的safe_cast<>

  有“句柄”//也能用指针

    C++   int* pN=new int[2]; 指针  内存地址  不变

    C++/CLI int^ nN=gcnew int[2]; 句柄  变量地址  更新//我怀疑这个实际上是在.net环境中虚拟的地址

  字符串类

    C++   string  C++类库  #include <string>

    C++/CLI String  .net类   using namespace System;  初始化后不可变,修改操作实际上返回的是新的字符串。

         StringBuilder  .net类  using namespace System::Text;  对于要经常修改的应该用这个

=======================================================================

第四章 使用函数

  Math::Round() 小数按位数四舍五入

  Console::ReadLine() 从键盘读取输入

  Convert::ToDouble() 字符串转double

  Random  随机数?

=======================================================================

第五章 判断和循环语句

  没有提到goto,看起来是作者在C++/CLI中不提倡用的样子,不过我很好奇有什么方法能优雅的跳出多层循环内部?

=======================================================================

第六章 类和对象进阶

  创建对象提倡使用^//声明句柄

  C++    构造函数

  C++/CLI  构造器

  #using <mscorlib.dll>  导入Microsoft intermediate language(MSIL)文件mscorlib.dll  使用文件定义的托管数据和构造

  推荐使用成员初始化列表

  静态构造器  对类进行一次性初始化  在使用这个类的任何东西之前会调用

        使用Static修饰  无参数

        声明  static MyClass1();

        实现  static MyClass1(){...}

  

  类级常量//在类的所有实例中都不变的值

    C++    static const

    C++/CLI  literal  要有初值  

  实例常量//创建实例后不能修改

    C++/CLI  initonly  由构造器设置

  nullptr  表示空句柄

=======================================================================

第七章 控制对象生存期

  垃圾回收器  gc//怪不得有gcnew

    托管堆

    代//无视吧

    强制垃圾回收 System::GC::Collect()

  析构器//析构

    delete对象时发生//gcnew和delete

  终结器

    前缀  !

    垃圾回收器在回收对象的内存之前发生

    使用了非托管资源就需要终结器//非托管代码中的 非托管类的指针 文件句柄 窗口句柄 图形设备上下文等

    不要定义空白内容的终结器

    终结器的执行顺序不能保证

    程序终止期间仍旧存活的对象不会调用终结器 可能不会正确清理自己

      后台线程使用的对象

      终结器内创建的对象

    可在析构器中调用终结器

  清理对象、回收内存  独立发生

  字符串和数组只能用gcnew,不能用栈语义创建

  拷贝构造函数

    C++    要么自己创建要么编译器提供  虽然编译器提供的默认拷贝构造函数是浅拷贝

    C++/CLI  只能自己创建  

    %  跟踪引用  C++中用拷贝构造函数和&

    *  解引用    C++中用途差不多

=======================================================================

第八章 继承

  System::Decimal  

    精确表示浮点值,不会发生舍入情况。

    效率不如float和double

  基类只能用成员初始化列表进行初始化

  只支持公共继承,可以不加public关键字

  构造函数照常声明,实现时函数头要有成员初始化列表(来初始化基类)。

  抽象类

    类名后加abstract修饰

  重写成员函数

    不需要重写的  不处理

    重写基类函数

      virtual int GetNum() override  重写覆盖基类函数

      virtual int GetNum() new    重写隐藏添加

      抽象(纯虚函数)

        virtual int GetNum()=0;

        virtual int GetNum() abstract;

    一定是我的C++理论版本太古老了,重写还能改变返回类型?VC6不能,现在2015不习惯,2010没尝试过。但这肯定不是个好的设计习惯。

  protected:

    只应创建受保护的成员函数,数据成员应该是私有的。

  密封类

    不可作为基类使用——它没有派生类

    ref class MyClass1 sealed{};

  既抽象又密封

    如,只包含静态成员

    ref class MyClass1 abstract sealed{};

    抽象  阻止实例化

    密封  阻止添加功能

  接口

    interface class IXxx

    {

     void Func(); 

    }

    ref class CMyClass1:IXxx

    {

      virtual void Func1();

    }

  类:

    C++    多继承

    C++/CLI  单继承  可实现多个接口

=======================================================================

第Ⅰ部分完结

  感觉没啥

=======================================================================

C++/CLI——读书笔记《Visual C++/CLI从入门到精通》 第Ⅰ部分的更多相关文章

  1. C++/CLI——读书笔记《Visual C++/CLI从入门到精通》 第Ⅳ部分

    =================================版权声明================================= 版权声明:本文为博主原创文章 未经许可不得转载  请通过右 ...

  2. C++/CLI——读书笔记《Visual C++/CLI从入门到精通》 第Ⅱ部分

    =================================版权声明================================= 版权声明:本文为博主原创文章 未经许可不得转载  请通过右 ...

  3. 《利用python进行数据分析》读书笔记--第五章 pandas入门

    http://www.cnblogs.com/batteryhp/p/5006274.html pandas是本书后续内容的首选库.pandas可以满足以下需求: 具备按轴自动或显式数据对齐功能的数据 ...

  4. <<Java RESTful Web Service实战>> 读书笔记

    <<Java RESTful Web Service实战>> 读书笔记 第一章   JAX-RS2.0入门 REST (Representational State ransf ...

  5. 4 Visual Effects 视觉效果 读书笔记 第四章

    4   Visual Effects    视觉效果        读书笔记 第四章 Well, circles and ovals are good, but how about drawing r ...

  6. 《Visual C# 从入门到精通》第一章使用变量、操作符和表达式——读书笔记

    前言: 这个笔记是我个人总结,主要是熟练自己查看<Visual C# 从入门到精通>(第8版)这本书时,懵然起总结的想法,只是总结一些知识点,在工作项目会用得上,但是对毫无C#语言基础的, ...

  7. Angular学习笔记:Angular CLI

    定义 Angular CLI:The Angular CLI is a command line interface tool that can create a project, add files ...

  8. 认识CLR [《CLR via C#》读书笔记]

    认识CLR [<CLR via C#>读书笔记] <CLR via C#>读书笔记 什么是CLR CLR的基本概念 通用语言运行平台(Common Language Runti ...

  9. CLR基础之一---认识CLR [《CLR via C#》读书笔记]

    <CLR via C#>读书笔记 什么是CLR CLR的基本概念 通用语言运行平台(Common Language Runtime,简称CLR)是微软为他们的.Net虚拟机所选用的名称.这 ...

随机推荐

  1. tps (事务处理系统)

    事务处理系统:Transaction processing systems (TPS) 提高事务处理效率与保证其正确性 在数据(信息)发生处将它们记录下来 通过OLTP产生新的信息 将信息保存到数据库 ...

  2. SQL内部拼接执行SQL语句时,实现变量参数化

    exec sp_ExecuteSql执行的SQL语句拼接起是比较麻烦,如果关联的表多拼接过程是很容易出错的,下面这方法非常的好用,而且简单直观 if exists(select * from syso ...

  3. Eclipse保存文件时自动格式化代码

    实现效果:Ctrl+S会自动格式化并保存代码. 应用上图所示效果之后,在每次对Eclipse保存的时候都会实现自动格式化代码. 1. Fomated All lines,格式化该文件的所有代码:还是 ...

  4. Markdown生成左边框目录

    自从接触了Markdown后就一直用这种语言写学习笔记. 但是一直在纠结如何生成方便的目录. 下面是我搞得一个简单的模板可以生成固定在屏幕左边的目录. 就是这种 第一步,编辑器 首先,需要一个可以自动 ...

  5. MySQL日期处理(笔记)

    对于刚学习MySQL的人日期的处理是个大坑. 这里整理了如何处理常见的日期问题. (这只是我在学习过程中关于日期处理方面知识的总结,会有一些错误和片面的地方.) Date 函数 函数 描述 NOW() ...

  6. C++析构函数调用异常问题研究

    最近又遇到一个奇葩问题,程序在自己的开发机器和某些机器上运行完好,但是在测试人员的几台机器上运行就直接推出了.开始以为是出现了野指针,因为delete野指针时程序会直接退出.代码翻来覆去过来即便确认没 ...

  7. 七个结构模式之装饰者模式(Decorator Pattern)

    定义: 使用组合的方法,动态给一个类增加一些额外的功能,避免因为使用子类继承而导致类继承结构复杂.并且可以保持和被装饰者同一个抽象接口,从而使客户端透明. 结构图: Component:抽象构件类,定 ...

  8. Webpack - CommonJs & AMD 模块打包器

    Webpack 是一个 CommonJs & AMD 模块打包器.可以把你的 JavaScript 代码分离为多个包,在需要的时候进行加载,支持预处理文件,例如 json, jade, cof ...

  9. mysql行转列、列转行示例

    最近在开发过程中遇到问题,需要将数据库中一张表信息进行行转列操作,再将每列(即每个字段)作为与其他表进行联表查询的字段进行显示. 借此机会,在网上查阅了相关方法,现总结出一种比较简单易懂的方法备用. ...

  10. CodeIgniter_2 路由中定义伪静态 直接映射到相关的控制器

    某些情况下 隐藏路径信息 使用伪静态定义: RewriteRule ^no/torrent(.*)$ /index.php/torrent/doit/$1 CodeIgniter会自动识别到 no 控 ...