C++学习笔记
文章平均质量分 52
fairy_study
这个作者很懒,什么都没留下…
展开
-
字节对齐
一.什么是字节对齐,为什么要对齐? 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。 对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据转载 2008-12-16 15:17:00 · 174 阅读 · 0 评论 -
异常处理(六、各种异常处理的对比)
下表给出了从以上Visual C++所支持的四种异常处理进行的对比:异常处理 支持语言 是否标准 复杂度 推荐使用 C异常处理 C语言 准C 简单 推荐 C++异常处理 C++语言 标准C++转载 2010-05-12 11:46:00 · 308 阅读 · 0 评论 -
异常处理(三、C++语言异常处理)
1 C++异常处理语法 C++语言的后期改造者们,他们在标准C++语言中专门集成了异常处理的相关语法(与之不同的是,所有的C 标准库异常体系都需要运行库的支持,它不是语言内核支持的)。当然,异常处理被加到程序设计语言中,也是程序语言发展和逐步完善的必然结果。我们看到,C++不是唯一集成异常处理的语言。 C++的异常处理结构为: CODE: ----------------------转载 2010-05-12 11:54:00 · 183 阅读 · 0 评论 -
异常处理(二、C语言的异常处理)
1 异常终止 标准C库提供了abort()和exit()两个函数,它们可以强行终止程序的运行,其声明处于头文件中。这两个函数本身不能检测异常,但在C程序发生异常后经常使用这两个函数进行程序终止。下面的这个例子描述了exit()的行为:CODE: -------------------------------------------------------------------------转载 2010-05-12 11:56:00 · 234 阅读 · 0 评论 -
在VC程序中使用调试语句----(一)断言
为了更好地对程序调试,可以使用如下方法:使用断言、使用跟踪语句、使用异常和返回值。一、断言1、基本概念 断言是一种让错误在运行时候自我暴露的简单有效实用的技术。它们帮助你较早较轻易地发现错误,使得整个调试过程效率更高。 断言是布尔调试语句,用来检测在程序正常运行的时候某一个条件的值是否总为真,它能让错误在运行时刻暴露在程序员面前。使用断言的最大好处在于,能在更解决错误的发源地的转载 2010-05-12 12:08:00 · 279 阅读 · 0 评论 -
异常处理(一、前言)
Visual C++提供了对C语言、C++语言及MFC的支持,因而其涉及到的异常(exception)处理也包含了这三种类型,即C语言、C++语言和MFC的异常处理。除此之外,微软对C和C++的异常处理进行了扩展,提出了结构化异常处理(SEH)的概念,它支持C和C++(与之相比,MFC异常处理仅支持C++)。 一个典型的异常处理包含如下几个步骤: (1)程序执行时发生错误; (2转载 2010-05-12 11:57:00 · 175 阅读 · 0 评论 -
volatile的作用
volatile 修饰符的作用是告诉编译器无需对该变量作任何的优化,即无需将它放到一个寄存器中,并且该值可被外部改变。对于多线程引用的全局变量来说,volatile 是一个非常重要的修饰符.一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的原创 2010-05-14 21:21:00 · 361 阅读 · 0 评论 -
C++中的虚函数(virtual function)
简 介 缺省情况下,类的成员函数是非虚拟的。当一个成员函数为非虚拟的时候,通过一个类对象(指针或引用)而被调用的该成员函数,是该类对象的静态类型中定义的成员函数。当成员函数是虚拟的时候,通过指针或引用而被调用的该成员函数,是在该类对象的动态类型中被定义的成员函数。但是,正如所发生的,类对象的静态和动态类型是相同的,所以虚拟函数机制只在使用指针和引用时才会如预期般地起作用。第一次引入虚拟原创 2010-05-22 21:56:00 · 576 阅读 · 0 评论 -
c++中RTTI的观念和使用
下面这篇文章虽然有点老,但对C++的RTTI基本原理讲的比较透彻。该文章摘自UMLCHINA网站,是台湾一个群体写的,我根据大家比较熟悉的方式,修改了一些名词的说法,如衍生(派生)等,让大家可以方便的阅读。C++的 RTTI 观念和用途物泽C++应用小组 自从1993年Bjarne Stroustrup 〔注1 〕提出有关C++ 的RTTI功能之建议﹐以及C++的异常处理(exception h转载 2010-05-24 23:18:00 · 213 阅读 · 0 评论 -
explicit关键字的作用
++中的explicit关键字用来修饰类的构造函数,表明该构造函数是显式的,既然有"显式"那么必然就有"隐式",那么什么是显示而什么又是隐式的呢?如果c++类的构造函数有一个参数,那么在编译的时候就会有一个缺省的转换操作:将该构造函数对应数据类型的数据转换为该类对象,如下面所示: class MyClass{public:MyClass( int num );}....MyClass原创 2010-05-24 23:15:00 · 234 阅读 · 0 评论 -
C++指向类成员函数的指针
首先 函数指针是指向一组同类型的函数的指针;而类成员函数我们也可以相似的认为,它是指向同类中同一组类型的成员函数的指针,当然这里的成员函数更准确的讲应该是指非静态的成员函数。前者是直接指向函数地址的,而后者我们从字面上也可以知道 它肯定是跟类和对象有着关系的。 函数指针实例:typedef int (*p)(int,int);//定义一个接受两个int型且返回int型变量的函数转载 2010-05-22 23:57:00 · 269 阅读 · 0 评论 -
在VC程序中使用调试语句----(三)异常
三、异常1、基本概念 错误是一种条件,在这种条件下,如果不执行额外的处理,线程就不能正常地执行下去。异常是用于处理错误的。使用异常的一个很明显的好处就是它们通过发出错误信号,可以让程序代码和错误处理代码分开,而且不会让程序忽略错误,你不用不断地检查函数的返回值,因此它们将程序代码简单化。另一个好处是它们不需要严格的编程作风。异常的基本特性:.异常是基于每个进程而提出并处理的。转载 2010-05-12 12:06:00 · 250 阅读 · 0 评论 -
在VC程序中使用调试语句----(二)跟踪语句
二、跟踪语句1、基本概念 跟踪语句(trace statements)可使程序执行,并使程序员可对可变值进行查看。它们提供了一个用于观察的程序,并且独立于一个交互式的调试器,但是最具有特色的是它们常用于对调试器提供的信息进行补充。在VC中,跟踪消息通常输出到输出窗口中的Debug标签,也可以重新输出到一个文件中。跟踪语句的特性如下:.跟踪语句用于报告代码中重要的运行事件。.跟踪语转载 2010-05-12 12:07:00 · 274 阅读 · 0 评论 -
构造函数、析构函数与赋值函数
构造函数、析构函数与赋值函数是每个类最基本的函数。它们太普通以致让人容易麻痹大意,其实这些貌似简单的函数就象没有顶盖的下水道那样危险。 每个类只有一个析构函数和一个赋值函数,但可以有多个构造函数(包含一个拷贝构造函数,其它的称为普通构造函数)。对于任意一个类A,如果不想编写上述函数,C++编译器将自动为A产生四个缺省的函数,如A(void); // 缺省的无参数构造函数A(const A转载 2008-12-16 15:39:00 · 226 阅读 · 0 评论 -
如何重载自增运算符 ++ 和自减运算符 --
如何重载增量运算符 ++ 和 -- 运算符++和—有前置和后置两种形式,如果不区分前置和后置,则使用operator++( )或operator--( )即可;否则,要使用operator++( )或operator--( )来重载前置运算符,使用operator++(int)或operator--(int)来重载后置运算符,调用时,参数int被传递给值0。如下列程序段: #includ原创 2008-12-16 15:45:00 · 1944 阅读 · 1 评论 -
ASSERT和VERIFY的区别
ASSERT和VERIFY的区别 1 ASSERT与VERIFY宏在Debug模式下作用基本一致,二者都对表达式的值进行计算,如果值为非0,则什么事也不做;如果值为0,则输出诊断信息。 2 ASSERT与VERIFY宏在Release模式下效果完全不一样。ASSERT不计算表达式的值,也不会输出诊断信息;VERIFY计算表达式的值,但不管值为0还是非0都不会输出诊断信息。VERIFY原创 2009-10-10 15:34:00 · 326 阅读 · 0 评论 -
孙鑫VC学习笔记(图形的保存和重绘)
孙鑫VC学习笔记 11(1)第11课 如何让CDC上输出的文字、图形具有保持功能 1.创建4个菜单,为其添加消息响应,用成员变量保存绘画类型。添加LButtonDown和Up消息。2.当窗口重绘时,如果想再显示原先画的数据,则需要保存数据。为此创建一个新类来记录绘画类型和两个点。class CGraph {public:CPoint m_ptOrigin;//起点CPoint m_原创 2010-04-20 16:35:00 · 1889 阅读 · 0 评论 -
MFC利用CWnd::OnCommand提前处理消息
利用CWnd::OnCommand提前处理消息 先说下CWnd::OnCommand的含义,引用自MSDN: The framework calls this member function when the user selects an item from a menu, when a child control sends a notification messa转载 2010-04-10 16:24:00 · 7578 阅读 · 3 评论 -
关于VC字符集设置[转]
很多初學者從 VC++ 6.0 升級到 VC++ 2005 的時候, 經常發現到原本在 VC++ 6.0 版順利編譯並執行的程式突然無法編譯了. 像以下這個簡單的例子: char ch[80]; CString str("Hello World"); strcpy(ch, str);當用在新產生的 VC++ 2005 專案裡的時候, VC++ 2005 會發出類似以下的錯誤訊息: erro转载 2010-04-30 14:32:00 · 1956 阅读 · 0 评论 -
C++中this指针的用法
this指针只能在一个类的成员函数中调用,它表示当前对象的地址。下面是一个例子: void Date::setMonth( int mn ) { month = mn; // 这三句是等价的 this->month = mn; (*this).month = mn; } 1. this只能在成员函数中使用。全局函数,静态函数都不能使用thi原创 2010-05-06 12:10:00 · 252 阅读 · 0 评论 -
异常处理(五、结构化异常处理)
结构化异常处理(Structured Exception Handling,简称SEH)是微软针对Windows程序异常处理进行的扩展,在Visual C++中,它同时支持C和C++语言。SEH不宜与标准C++异常处理和MFC异常处理混用,对于C++程序,微软建议使用标准C++的异常处理。 为了支持SEH,Visual C++中定义了四个关键字(由于这些关键字是非标准关键字,其它编译器不一定转载 2010-05-12 11:49:00 · 178 阅读 · 0 评论 -
异常处理(四、MFC异常处理)
MFC中异常处理的语法和语义构建在标准C++异常处理语法和语义的基础之上,其解决方案为: MFC异常处理 = MFC 异常处理类 + 宏1 宏 MFC定义了TRY、CATCH(及AND_CATCH、END_CATCH)和THROW(及THROW_LAST)等用于异常处理的宏,其本质上也是标准C++的try、catch和throw的进一步强化,由这些宏的定义可知: CODE: --转载 2010-05-12 11:52:00 · 280 阅读 · 0 评论 -
在VC程序中使用调试语句----(四)返回值
四、返回值 并不是在所以场合下都能使用异常,如在使用Windows API编程或带有COM编程时并不使用异常。在异常不适合的时候,使用返回值是一个好的办法。返回值的基本特性:.返回值可以指示正常和不正常的函数运行,但不能阻止线程的继续运行。.返回值很容易被忽略。.返回值在典型情况下是一个整数,通常映射符合于一个预定义的值。.返回值能高效地传递和接收。因此,返回值最适合转载 2010-05-12 12:05:00 · 174 阅读 · 0 评论 -
C++标准库简介(转)
C++标准库的所有头文件都没有扩展名。C++标准库的内容总共在50个标准头文件中定义,其中18个提供了C库的功能。 形式的标准头文件【 例外】其内容与ISO标准C包含的name.h头文件相同,但容纳了C++扩展的功能。在 形式标准的头文件中,与宏相关的名称在全局作用域中定义,其他名称在std命名空间中声明。在C++中还可以使用name.h形式的标准C库头文件名。C++标准库的内容分为10类:C1.转载 2010-05-23 23:36:00 · 173 阅读 · 0 评论