快捷搜索:  
C++:最强大的.NET语言之对象构造

C++:最强大的.NET语言之对象构造

简介 Visual C++开发小组花了大量的时间用于听取用户的意见,在对 .NET和C++经过仔细考量之后,决定在Visual C++ 2005中重新设计对通用语言运行时库(CLR)的支持,此项重新的设计被称为"C++/CLI",它将为使用及编写CLR类型提供更自然的语法。在本文中,主要探讨了新的语法,并将之与C#和托管C++这两个CLR平台上极其相近的语言进行比较,在文中也会适当地以图表给出其与本地C++的相似之处。 通用语言运行时库(CLR)包括了一组规范,其是Microsoft .NET的基础,也...

C++对象的拷贝与赋值操作

C++对象的拷贝与赋值操作

我发现一些同事在编写一个类时,知道什么时候需要实现拷贝构造函数和赋值操作,但不知道什么时候拷贝构造函数被调用,什么时候赋值操作被调用,甚至把二者混为一谈。 要弄明白这个问题,最简单的做法莫过于写个测试程序试一下。不过那样做也未必是好办法,实验的结果往往导致以偏概全的结论。不如好好想一下,弄清楚其中的原理,再去写程序去验证也不迟。 拷贝构造函数,顾名思义,等于拷贝+ 构造。它肩负着创建新对象的任务,同时还要负责把另外一个对象拷贝过来。比如下面的情况就调用拷贝构造函数: CString str = strO...

C++还能重新辉煌吗?C++复杂性的思考

C++还能重新辉煌吗?C++复杂性的思考

C++的表面困境来自两方面,一是开发效率低,而是容易犯错,维护难度大。此二者俱是表象,本质就是一个——过度复杂。或有人说C++之关键缺陷是没有统一完整的类库支撑,Bjarne Stroustrup即强调此因素。然而这其实只不过是一个结果,而不是原因。正是因为语言太复杂,才无法在有效期内开发出高质量的大一统的类库。 C++的复杂,并非是其体积庞大之必然结果。复杂是对结构混乱无序程度的描述,规模大,结构不见得必然复杂。 C++的复杂,也并不是如很多人所认为,是若干种编程范式(paradigms)的并存而至。...

对C++标准委员会强制For循环的不同看法

对C++标准委员会强制For循环的不同看法

我曾在网上发了一个贴子,指出C++标准委员会制定标准强制for循环一致性的做法是不合理的。 其实关于强制for循环一致性的讨论一直是比较激烈的,以前我在国外一些邮件列表中常常见到这样的话题,两方面的意见基本持平,不分高下。 我在做我自己的太极语言时发现了一个规则,根据这个规则平滑推理过来可以判断出不应强制for循环一致性,我就在我的blog和贴子里说了。可是没想到竟然…… 我觉到我们中国程序员界有一种不正确的思维定势,过于迷信C++标准委员会(不只C++),过于迷信这样的所谓权威,不敢对它说一个不字,不...

C++箴言:了解C++偷偷加上和调用了什么

C++箴言:了解C++偷偷加上和调用了什么

几乎每一个你自己写的类都会有一个或多个构造函数,一个析构函数和一个拷贝赋值运算符。不要惊奇,那是些就像你的面包黄油一样的函数,他们控制着基本的操作,如创建一个新的对象并确保已被初始化,消除一个函数并确保它被完全清除,以及为对象赋予一个新值。这些函数中出现错误,将引起你的类出现影响深远的,而且令人不快的反弹,所以保证他们正确是生死攸关的事情。本章中,我将对如何组装这些函数以成为一个好的类的中枢骨干提供一些指导。 什么时候一个空的类将变得不空?答案是当 C++ 得到了它。如果你自己不声明一个拷贝构造函数,一...

深入浅出话异常

深入浅出话异常

标准C的处理机制 标准C提供了几个异常管理机制,这些在标准C++也可用,虽然相关的头文件名有了改变:旧的C标准头文件名从<name.h>映射到新的C++标准头文件名<cname>。(头文件名的前缀C是为了记忆,指明它们是标准C的库文件) 虽然在C++的向后兼容里保留了C的头文件,但我劝告你在任何可能的地方使用新的头文件。对于许多实际使用中,最大的改变是在新的头文件与namespace std内进行声明。请看以下示例: #include <stdio.h...

探索C++的秘密之详解extern  "C"

探索C++的秘密之详解extern "C"

时常在cpp的代码之中看到这样的代码: #ifdef __cplusplus extern "C" { #endif //一段代码 #ifdef __cplusplus } #endif 这样的代码到底是什么意思呢?首先,__cplusplus是cpp中的自定义宏,那么定义了这个宏的话表示这是一段cpp的代码,也就是说,上面的代码的含义是:如果这是一段cpp的代码,那么加入extern "C"{和}处理其中的代码。 要明白为何使用extern "C",还得从cpp中对函数的重载处理开始说起。在c++中,...

关于目录处理的一些函数

关于目录处理的一些函数

在编程时,经常有一些针对目录的操作,如打开目录对话框选择一个目录,直接创建多级目录,直接删除多级目录,判断某个目录是否存在等。本文就这些问题给出编程实现方法,并给出详细的程序代码,供各位编程爱好者参考。 一、判断目录是否存在: C++ Builder中提供了检查文件是否存在的函数FileExists,但没有提供检查目录是否存在的函数,我们可以用Windows API函数FindFirstFile实现这个功能。程序实现如下: 设char *Dir为带判断的目录 bool Exist; // 最后结果,表示...

关于初始化C++类成员

关于初始化C++类成员

在使用C++编程的过程当中,常常需要对类成员进行初始化,通常的方法有两种: 第一种方法: CMYClass::CSomeClass() { x=0; y=1; }第二种方法: CSomeClass::CSomeClass() : x(0), y(1) { }本文将要探讨这两种方法的异同以及如何使用这两种方法。 从技术上说,第二种方法比较好,但是在大多数情况下,两者实际上没有什么区别。第二种语法被称为成员初始化列表,之所以要使用这种语法有两个原因:一个原因是必须这么做,另一个原因是出于效率考虑。 让我们先...

关于程序撰写风格

关于程序撰写风格

曾听人说过这么一句话,通过一个程序员的编程风格,可以看出这个程序员有没有大量阅读和撰写程序的经验。虽不能这样一概而论,但多少可以看出编程风格的重要性。我这里说的编程风格,没有包括具体的编程思想等等,仅指的是撰写风格,也就是视觉上的风格。 也许有人会不太明白或者不肖一顾,写程序就写程序嘛,写出来的程序能正确有效地运行不就可以了,管它看起来是什么样子。其实不然,许多软件公司对员工编写的代码的风格都有硬性规定,比如规定了哪些地方要使用缩排、跳格键的长度、变量命名方式、不同功能代码间空的行数等等。这样的好处是可...

保卫C++:安全STL编程中的受检迭代子

保卫C++:安全STL编程中的受检迭代子

C++语言、STL、标准C++库,相比之C语言及C运行时库(CRT)而言,更加现代、也更加健壮。正因为软件的安全性与健壮性息息相关,所以在安全性方面,标准C++比C及CRT面临的问题更少,那也就不足为奇了。然而,在标准C++中,仍存在一些漏洞,而且,Visual C++ 2005中的一项新增功能,使这个所谓的“循环漏洞”更加容易被忽视。 STL在横向集合中,大量使用了迭代子(iterator),对迭代子不正确的使用,一般可以两种主要的方式表现出来: ·使用已被集合修改为无效的迭代子 ·使用迭代子试图访问...

霍夫曼树编码的实现

霍夫曼树编码的实现

#include stdio.h #include stdlib.h #include string.h #include conio.h typedef strUCt { unsigned int Weight; unsigned int Parent; unsigned int lChild; unsigned int rChild; }HTNode,*HuffmanTree; typedef char **HuffmanCode; int LookFor(char *str,char letter...