随笔分类 -  C/C++

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

posted @ 2012-10-08 09:36 micky.zhou 阅读(196) 评论(0) 推荐(0)

成员指针
摘要:C++中,成员指针是最为复杂的语法结构。但在事件驱动和多线程应用中被广泛用于调用回叫函数。在多线程应用中,每个线程都通过指向成员函数的指针来调用该函数。在这样的应用中,如果不用成员指针,编程是非常困难的。 刚遇到这种语法时也许会让你止步不前。但你会发现,使用恰当的类型定义之后,复杂的语法是可以简化的。本文引导你了解成员函数指针的声明,赋值和调用回叫函数。 成员函数指针的声明 一个成员函数指针包括成员函数的返回类型,后随::操作符类名,指针名和函数的参数。初看上去,语法有点复杂。其实可以把它理解为一个指向原函数的指针,格式是:函数返回类型,类名,::操作符,指针星号,指针名,函... 阅读全文

posted @ 2012-09-10 21:48 micky.zhou 阅读(230) 评论(0) 推荐(0)

隐藏、覆盖重载问题解析
摘要:成员函数的重载(overload)、覆盖(override)与隐藏很容易混淆,C++程序员必须要搞清楚概念,否则错误将防不胜防。1、重载与覆盖1.1成员函数被重载的特征:(1)相同的范围,在相同的作用域中,具体到类中指的就是在同一个类中;(2)函数名字相同;(3)参数不同;(4)virtual 关键字可有可无;1.2成员函数覆盖特征(1)不同的范围(分别位于派生类与基类)(2)函数名字相同;(3)参数相同;(4)基类函数必须有 virtual 关键字。在下面example 1当中 ,函数Base::f(int) 与 Base::f(float) 相互重载,而Base::g(void) 被 De 阅读全文

posted @ 2012-08-10 17:37 micky.zhou 阅读(243) 评论(0) 推荐(0)

关于函数返回值为数组的时候的问题解析
摘要:用函数返回值来传递动态内存这种方法虽然好用。但是常常有人把return语句用错了。 我们强调一定不要用return语句返回指向“栈内存”的指针,因为栈内存空间在函数结束后被释放了。1 我在用g++编译如下程序的时候,使用的命令是"g++ -Wall -g getString.cpp -o getString",用gdb调试程序。结果很令人疑惑。 1 #include<iostream> 2 using namespace std; 3 4 char *GetString(void) 5 { 6 char p[]="hello world"; 阅读全文

posted @ 2012-08-08 18:08 micky.zhou 阅读(1946) 评论(0) 推荐(1)

四类内存存储分区中的主要内容
摘要:一个具有多个源文件的程序经过编辑(editing)、编译(compiling)和连接(linking)后,产生一个文件,即可执行模块(executable module),以供运行。每个以磁盘文件形式存在的可执行模块一般包括两个分区:代码区和数据区,而当系统将可执行模块装载到内存中以便运行时,由系统将栈区和堆区加进程序的内存区中,因此,一个准备运行的程序在内存区中共有四个分区:代码区、数据区、栈区和堆区。所有函数(包括主函数、非主函数、各类中的成员函数)的代码通常被存放在内存的代码区。全局变量和所有静态(外部和内部)变量通常被存放在内存的数据区。所有函数(包括主函数、非主函数、各类中的成员.. 阅读全文

posted @ 2012-08-01 17:26 micky.zhou 阅读(528) 评论(0) 推荐(0)

(转)C++内存管理
摘要:内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从 中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对C++的痛恨,但内存管理在C++中无处不在,内存泄漏几乎在每个C++程 序中都会发生,因此要想成为C++高手,内存管理一关是必须要过的,除非放弃C++,转到Java或者.NET,他们的内存管理基本是自动的,当然你也放 弃了自由和对内存的支配权,还放弃了C++超绝的性能。本期专题将从内存管理、内存泄漏、内存回收这三个方面来探讨C++内存管理问题。1 内存管理1.1 C++内存管理详解1.1.1 内存分配方式1.1.1.1 分配方式简介 在C++. 阅读全文

posted @ 2012-07-29 08:37 micky.zhou 阅读(243) 评论(0) 推荐(0)

gdb的使用
摘要:官方地址 GDB: The GNU Project DebuggerLinux 包含了一个叫gdb 的GNU 调试程序。gdb 是一个用来调试C和C++程序的强力调试器。它使你能在程序运行时观察程序的内部结构和内存的使用情况。以下是 gdb 所提供的一些功能:它使你能监视你程序中变量的值、它使你能设置断点以使程序在指定的代码行上停止执行、它使你能一行行的执行你的代码。在命令行上键入 gdb并按回车键就可以运行gdb 了。(Windows需要安装MinGW或者CygWin并且需要配置环境变量才可以使用)GDB 命令行参数启动 GDB:l gdb executablel gdb -e execut 阅读全文

posted @ 2012-07-21 09:51 micky.zhou 阅读(643) 评论(0) 推荐(0)

数组作为函数参数
摘要:当数组作为函数形参的时候,共有如下三种形式:1 void printValue(int*) { /*......*/}2 void printValue(int []) {/*......*/}3 void printValue(int [10]) {/*.....*/}函数不能直接传递数组,但是函数的形参可以写成数组的形式。虽然形参表示方式不同,但是可将使用数组语法定义的形参看做指向数组元素类型的指针。上面三种定义都是等价的,形参类型实际上都是int*。如下所示例子,在编译结果中sizeof(a)不论是上面哪三种形式,值都是4,即指针类型的4 byte。 1 #include<iost 阅读全文

posted @ 2012-07-18 00:04 micky.zhou 阅读(272) 评论(0) 推荐(0)

导航