代码改变世界

随笔分类 -  C/C++大海捞针

C++构造函数语义——默认构造函数

2012-03-26 15:19 by htc开发, 188 阅读, 收藏,
摘要: 0、前言 《The C++ ARM》告诉我们:“默认构造函数会在需要的时候自动生成(被编译器)。”然后“在需要的时候”是一个很抽象的概念,本文主要描述的问题也正是这些需要的情况。 我们看看下面的代码片段:class Foo { public: int val; Foo *pnext; }; void foo_bar() { Foo bar; if (bar.val || bar.pnext) { cout << bar.val << endl; cout << bar.pnext << endl; } }用... 阅读全文

无法解析的外部符号 _main解决办法

2011-11-08 22:45 by htc开发, 1672 阅读, 收藏,
摘要: 许多新手在编程时经常遇到“无法解析的外部符号 _main,该符号在函数 ___tmainCRTStartup 中被引用”这样的错误,最近看了一些这方面的书籍,现将解决方案大概叙述一下:连接程序在负责连接可执行程序时,选择相应的c/c++运行时启动函数。如果设定了/subsystem:windows连接程序开关,那么连接程序会试图寻找WinMain或wWinMain函数。如果连个函数都不存在,那么就会返回一个“一个未解决的外部符号”(无法解析的外部符号 _main,该符号在函数 ___tmainCRTStartup 中被引用)同样,如果设定了/subsystem:console连接程序开关,那么 阅读全文

如何检测内存泄漏(转)

2011-10-12 10:26 by htc开发, 364 阅读, 收藏,
摘要: 编者按:这几天在调试课本上关于二叉树的有关代码,发现严的这本数据结构教程喜欢把简单问题复杂化,当然这是从学生角度出发,从个人角度出发,这本书注重代码的可读性、重用等,更侧重于与软件工程、软件组织结合,当然是不错的教材。比如,其栈和队列的顺序实现,也都用指针来代替数组,让学生是很难理解。我在实现过程中,也有点拿不稳,特别是用队列或栈来存储树的结点(也是指针)时,为了确保没问题,特别是内存的分配,我搜索并安装了Virtual Leak Detector,一个开源的内存泄漏检测工具。以下是转:初识Visual Leak Detector灵活自由是C/C++语言的一大特色,而这也为C/C++程 序员出 阅读全文

归并排序

2011-09-22 10:55 by htc开发, 142 阅读, 收藏,
摘要: 归并排序:二路归并排序 此算法采用自顶向下的归并排序算法,算法形式简洁,首先设排序的当前区间为a[low...high]具体步骤: 分解:将当前区间一分为二,即求分裂点。 求解:递归地对两个子区间a[low...middle]和a[middle+1...high]进行归并排序 组合:将已排序的两个子区间a[low...middle]和a[middle+1...high]归并为一个有序的区间r[low...high] 递归总结条件:子区间长度为1(一个记录本身就是有序的)算法的代码实现:#include <stdio.h>#include <stdlib.h>void m 阅读全文

cdecl、stdcall、fastcall函数调用约定区别

2011-08-22 10:43 by htc开发, 147 阅读, 收藏,
摘要: 在C语言中,假设我们有这样的一个函数: int function(int a,int b) 调用时只要用result = function(1,2)这样的方式就可以使用这个函数。但是,当高级语言被编译成计算机可以识别的机器码时,有一个问题就凸现出来:在CPU中,计算机没有办法知道一个函数调用需要多少个、什么样的参数,也没有硬件可以保存这些参数。也就是说,计算机不知道怎么给这个函数传递参数,传递参数的工作必须由函数调用者和函数本身来协调。为此,计算机提供了一种被称为栈的数据结构来支持参数传递。 栈是一种先进后出的数据结构,栈有一个存储区、一个栈顶指针。栈顶指针指向堆栈中第一个可用的... 阅读全文

__attribute__ 详解

2011-08-22 10:23 by htc开发, 157 阅读, 收藏,
摘要: From http://hi.baidu.com/cygnusnow/blog/item/8b82000f871fcf2f6159f3de.htmlGNU C的一大特色(却不被初学者所知)就是__attribute__机制。__attribute__可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)。__attribute__书写特征是:__attribute__前后都有两个下划线,并切后面会紧跟一对原括弧,括弧里面是相应的__attribute__参数。__attribute__语法格式为:__ 阅读全文

构造函数中调用虚函数——转自百度文库

2011-06-24 14:32 by htc开发, 189 阅读, 收藏,
摘要: C++中构造函数中调用虚函数的问题在构造函数中调用虚成员函数,虽然这是个不很常用的技术,但研究一下可以加深对虚函数机制及对象构造过程的理解。这个问题也和一般直观上的认识有所差异。先看看下面的两个类定义。struct C180{ C180() { foo(); this->foo(); } virtual foo() { cout << "<< C180.foo this: " << this << " vtadr: " << *(void**)this << endl; }}; 阅读全文

C++中默认构造函数的生成(哪些情况会产生默认构造函数)

2011-06-24 14:13 by htc开发, 440 阅读, 收藏,
摘要: #include <iostream>#include <cstdlib>using namespace std;//#define FOO_NON_DEFAULT_CONSTRUCTclass A{public: A():a(0){ cout << "construct..." << endl; } A(int value):a(value){ cout << "construct..." << endl; } ~A(){ cout << "deconstru 阅读全文

交换排序——冒泡排序和快速排序——C语言描述

2011-06-21 16:22 by htc开发, 178 阅读, 收藏,
摘要: #include <stdio.h> #include <stdlib.h> /*函数声明部分*/ void __quick_sort(int par_array[], int low, int high);void bubble_sort(int par_array[], int array_size);void quick_sort(int par_arrayp[], int array_size);void print_array(int par_array[], int array_size); /*函数定义部分*/ void print_array(int p 阅读全文

插入排序——C语言描述

2011-06-21 11:11 by htc开发, 180 阅读, 收藏,
摘要: #include <stdio.h>#include <stdlib.h>/*函数声明部分*/void insert_sort(int par_array[], int array_size);void print_array(int par_array[], int array_size);void shell_sort(int par_array[], int array_size);/*函数定义部分*/void print_array(int par_array[], int array_size){ int i; for(i = 0; i < array_ 阅读全文

堆排序,插入,删除,调整算法(大顶堆)

2011-06-17 17:10 by htc开发, 442 阅读, 收藏,
摘要: #include <stdio.h>#include <stdlib.h>/*堆以数组为组织方式,下标从0开始*/#define INIT_ARRAY_SIZE 50/*函数声明部分*/void build_heap(int par_array[], int length);void max_heap_adjust(int par_array[], int index);void heap_sort(int par_array[], int length);void max_heap_insert(int **par_array, int item_value);voi 阅读全文

重载和覆写的区别

2011-06-15 13:30 by htc开发, 229 阅读, 收藏,
摘要: 重载是编写一个与已有函数同名但是参数表不同(参数数量活参数类型不同)的方法,它具有如下所示的特征: 1. 方法名必须相同 2. 参数列表可以不相同 3. 返回值类型可以不相同 覆写是派生类重写基类的虚函数,它具有如下所示的特征: 1. 只有虚函数和抽象方法才能够覆写 2. 具有相同的函数名 3. 具有相同的参数表 4. 具有相同的返回值类型 重载是一种语法规则,由编译器在编译阶段完成,不属于面向对象的编程;而覆写由运行阶段决定的,是面向对象编程的重要特征。 阅读全文

C语言基本数据类型详解

2011-06-08 22:14 by htc开发, 769 阅读, 收藏,
摘要: 原帖地址:http://www.cnblogs.com/jcsu/articles/1317826.html一、基本数据类型1. 基本数据类型的分类:C语言中的三种基本数据类型是:整型、实型、字符型。每种类型又可以分为常量和变量。整型常量:(1) 十进制的整型常量:由数字0~9组成。如:0、10、365、-12等。(2) 八进制的整型常量:以0开头,由数字0~7组成。如:0、010、0365、-012、011等。(3) 十六进制的整型常量:以0x或0X开头,由数字0~9、a~z或A~Z组成。如:0x11、0Xffff、0xa5、-0XAC等。注:C语言系统默认为基本整型常量。(关于“基本整型” 阅读全文

GDB 反向调试(Reverse Debugging)

2011-05-31 22:36 by htc开发, 474 阅读, 收藏,
摘要: 使用调试器时最常用的功能就是step, next, continue,这几个调试命令都是“往下执行”的, 但是很多时候会有这种需求:你在调试的过程中多跳过了几步而错过中间过程,这时候不得不重头调试一遍,非常麻烦。而GDB从7.0版本开始支持反向调试功能,也就是允许你倒退着运行程序,或者说撤销程序执行的步骤从而会到以前的状态。直观地来看,加入你正在使用GDB7.0以上版本的调试器并且运行在支持反向调试的平台,你就可以用以下几条命令来调试程序:reverse-continue反向运行程序知道遇到一个能使程序中断的事件(比如断点,观察点,异常)。reverse-step反向运行程序到上一次被执行的源 阅读全文

C++中Static作用和使用方法

2011-05-25 21:42 by htc开发, 233 阅读, 收藏,
摘要: 1、什么是static?static 是C++中很常用的修饰符,它被用来控制变量的存储方式和可见性。2、为什么要引入static?函数内部定义的变量,在程序执行到它的定义处时,编译器为它在栈上分配空间,大家知道,函数在栈上分配的空间在此函数执行结束时会释放掉,这样就产生了一个问题: 如果想将函数中此变量的值保存至下一次调用时,如何实现? 最容易想到的方法是定义一个全局的变量,但定义为一个全局变量有许多缺点,最明显的缺点是破坏了此变量的访问范围(使得在此函数中定义的变量,不仅仅受此函数控制)。3、什么时候用static?需要一个数据对象为整个类而非某个对象服务,同时又力求不破坏类的封装性,即要求 阅读全文