C++ 高级主题之模板特化
我们很难写出所有可能被实例化的类型都合适的模板。某些情况下,通用模板定义对于某个类型可能是完全错误的,所以我们需要能够实现处理某些特殊情况,特化的概念变是如此。compare函数和Queue类是这个问题的很好例子。因为与C风格字符串一起使用时,他们都不能正确工作。 template typename T int compare(const T v1,const T v2) { if(v1 v2) return -1; if(v2 v1) return 1; return 0; } 如果用两个const...
C++数组引用
1 .在C++中可以定义数组的引用,用以解决C中无法解决的“数组降价”问题,我们先来看看什么是“数组降价”,先看如下代码: … void Test( char array[20] ) { cout sizeof(array) endl; // 输出 4 } char array[20] = { 0 }; cout sizeof(array) endl; // 输出 20Test( array ); … 我们看到,对于同样的数组array,一个输出4,另一个输出20.这是因为void Test( char...
编程实现最小化窗口到桌面右下角图标的代码
//***********************************************************//函数名称 : ToTray//函数功能 : 最小化到系统托盘//输入参数 ://输出参数 ://返回代码 ://***********************************************************//本地注释 ://*********************************************************** void CB...
C/C++——浅谈函数宏应用优缺点
老的C语言程序员中有一种倾向,就是把很短的执行频繁的计算写成宏,而不是定义为函数。完成I / O的g e t c h a r,做字符测试的i s d i g i t都是得到官方认可的例子。人们这样做最根本的理由就是执行效率:宏可以避免函数调用的开销。实际上,即使是在C语言刚诞生时(那时的机器非常慢,函数调用的开销也特别大),这个论据也是很脆弱的,到今天它就更无足轻重了。有了新型的机器和编译程序,函数宏的缺点就远远超过它能带来的好处。 避免函数宏。在C++ 里,在线函数更削减了函数宏的用武之地,在J a...
C++库标准
如果你有一定的C基础可能学起来比较容易些,但是学习C++的过程中又要尽量避免去使用一些C中的思想;平时还要多看一些高手写的代码,遇到问题多多思考,怎样才能把问题抽象化,以使自己头脑中有类的概念;最后别忘了经常上机自己调调程序,这是谁也代替不了的。 C++类库介绍 再次体现了C++保持核心语言的效率同时大力发展应用库的发展趋势!!在C++中,库的地位是非常高的。C++之父 Bjarne Stroustrup先生多次表示了设计库来扩充功能要好过设计更多的语法的言论。现实中,C++的库门类繁多,解决的问题也是...
C++常见的内存错误及其对策
发生内存错误是件非常麻烦的事情。编译器不能自动发现这些错误,通常是在程序运行时才能捕捉到。而这些错误大多没有明显的症状,时隐时现,增加了改错的难度。有时用户怒气冲冲地把你找来,程序却没有发生任何问题,你一走,错误又发作了。常见的内存错误及其对策如下: 内存分配未成功,却使用了它。 编程新手常犯这种错误,因为他们没有意识到内存分配会不成功。常用解决办法是,在使用内存之前检查指针是否为NULL.如果指针p 是函数的参数,那么在函数的入口处用assert(p!=NULL)进行检查。如果是用malloc 或ne...
C++虚函数探索笔记(3)
C++虚函数探索笔记(3)——延伸思考:虚函数应用的一些其他情形 关注问题: 虚函数的作用 虚函数的实现原理 虚函数表在对象布局里的位置 虚函数的类的sizeof 纯虚函数的作用 多级继承时的虚函数表内容 虚函数如何执行父类代码 多继承时的虚函数表定位,以及对象布局 虚析构函数 大家都知道,在C++里需要自己严格管理好资源的分配和回收。通常情况下,在一个对象被析构的时候,是要由其释放其申请到的各种资源的。最常见的,当然就是内存资源啦。 当只有一个类的时候,我们可以不用考虑太多,只要在析构函数里检查并释放...
C++虚函数探索笔记(2)
C++虚函数探索笔记(2)——虚函数与多继承 关注问题: 虚函数的作用 虚函数的实现原理 虚函数表在对象布局里的位置 虚函数的类的sizeof 多继承时的虚函数表定位,以及对象布局 虚析构函数的作用 虚函数在QT的信号与槽中的应用 虚函数与inline修饰符,static修饰符 前面我们尝试了一个简单的例子,接下来尝试一个多级继承的例子,以及一个多继承的例子。主要涉及到以下问题:多级继承时虚函数表的内容是如何填写的,如何在多级继承的情况下调用某一级父类里的虚函数,以及在多继承(多个父类)的情况下的对象布...
C++虚函数探索笔记(1)
C++虚函数探索笔记(1)——虚函数的简单示例分析 关注问题: 纯虚函数的作用 多级继承时的虚函数表内容 虚函数如何执行父类代码 多继承时的虚函数表定位,以及对象布局 虚析构函数的作用 虚函数在QT的信号与槽中的应用 虚函数与inline修饰符,static修饰符 啰嗦两句 虚函数在C++里的作用是在是非常非常的大,很多讲述C++的文章都会讲到它,要用好C++,就一定要学好虚函数。网络上可以google到很多很多关于它的文章,这一次的学习,我不准备去只是简单的阅读了解那些文章,而是希望通过编写一些测试代...
C/C++中的联合 union
联合(union)在C/C++里面见得并不多,但是在一些对内存要求特别严格的地方,联合又是频繁出现,那么究竟什么是联合、怎么去用、有什么需要注意的地方呢?就这些问题,我试着做一些简单的回答,里面肯定还有不当的地方,欢迎指出! 1、什么是联合? “联合”是一种特殊的类,也是一种构造类型的数据结构。 在一个“联合”内可以定义多种不同的数据类型, 一个被说明为该“联合”类型的变量中,允许装入该“联合”所定义的任何一种数据,这些数据共享同一段内存,已达到节省空间的目的(还有一个节省空间的类型:位域)。 这是一个...
C++ 内部链接与外部链接
在说内部连接与外部连接前,先说明一些概念。 1.声明 一个声明将一个名称引入一个作用域; 在c++中,在一个作用域中重复一个声明是合法的 以下都是声明: int foo(int,int); //函数前置声明 typedef int Int; //typedef 声明 class bar; //类前置声明 extern int g_var; //外部引用声明 class bar; //类前置声明 typedef int Int; //typedef 声明 extern int g_var; //外部引用声...
如何在vc 6.0中运行c语言程序
方法一:1 打开记事本,键入以下代码:(一个例代码) #include stdio.h main() {int g; printf("g= \n"); scanf("%d",g); switch (g/10) {case 10: printf("A\n");break; case 9: printf("A\n");break; case 8: printf("B\n");break; case 7: printf("C\n");break; case 6: printf("D\n");break; ca...