- 博客(118)
- 收藏
- 关注
原创 C++派生类型的作用
在公有继承时,派生类的public,private,protected型的成员可以访问基类中的公有成员和保护成员,派生类的对象公可以访问基类的公有成员.在私有(private)继承时,派生类的public,private,protected型的成员函数可以访问基类公有成员和保护成员,但派生类的对象不可以访问基类的任何成员.Protected的继承方式与private继承相同.基类
2006-09-30 11:40:00
2976
转载 常见内存错误大全
大内高手—常见内存错误转载时请注明出处:http://blog.csdn.net/absurd随着诸如代码重构和单元测试等方法引入实践,调试技能渐渐弱化了,甚至有人主张废除调试器。这是有道理的,原因在于调试的代价往往太大了,特别是调试系统集成之后的BUG,一个BUG花了几天甚至数周时间并非罕见。而这些难以定位的BUG基本上可以归为两类:内存错误和并发问题。而又以内存错误最为
2006-09-30 11:27:00
3233
转载 第九章。指针的安全问题
第九章。指针的安全问题 看下面的例子: 例十七: char s=a; int *ptr; ptr=(int*)&s*ptr=1298; 指针ptr是一个int*类型的指针,它指向的类型是int。它指向的地址就是s的首地址。在32位程序中,s占一个字节,int类型占四个字节。最后一条语句不但改变了s所占的一个字节,还把和s相临的高地址方向的三个字节也改变了。这三个字节是干
2006-09-29 13:20:00
2127
转载 第八章。指针类型转换
第八章。指针类型转换 当我们初始化一个指针或给一个指针赋值时,赋值号的左边是一个指针,赋值号的右边是一个指针表达式。在我们前面所举的例子中,绝大多数情况下,指针的类型和指针表达式的类型是一样的,指针所指向的类型和指针表达式所指向的类型是一样的。 例十四: 1。 float f=12.3; 2。 float *fptr=&f 3。 int *p; 在上面的例子
2006-09-29 13:19:00
3916
1
转载 第七章。指针和函数的关系
第七章。指针和函数的关系 可以把一个指针声明成为一个指向函数的指针。 int fun1(char*,int); int (*pfun1)(char*,int); pfun1=fun1; int a=(*pfun1)("abcdefg",7);//通过函数指针饔煤? 可以把指针作为函数的形参。在函数调用语句中,可以用指针表达式来作为 实参。 例十三: int fun(char*); i
2006-09-29 13:18:00
2269
转载 第五章。数组和指针的关系
第五章。数组和指针的关系 一、数组的数组名其实可以看作一个指针。看下例: 例1: int array[10]={0,1,2,3,4,5,6,7,8,9},value; value=array[0];//也可写成:value=*array; value=array[3];//也可写成:value=*(array+3); value=array
2006-09-29 13:17:00
3168
1
转载 第六章。指针和结构类型的关系
第六章。指针和结构类型的关系 可以声明一个指向结构类型对象的指针。 例十一: struct MyStruct { int a; int b; int c; } MyStruct ss={20,30,40};//声明了结构对象ss,并把ss的三个成员初始化为20,30和40。 MyStruct *ptr=&ss//声明了一个指向结构对象ss的指针。它的类型是MyS
2006-09-29 13:17:00
1669
转载 第四章。指针表达式。
第四章。指针表达式。 一个表达式的最后结果如果是一个指针,那么这个表达式就叫指针表达式。 下面是一些指针表达式的例子: 例六: int a,b; int array[10]; int *pa; pa=&a//&a是一个指针表达式。 int **ptr=&pa//&pa也是一个指针表达式。 *ptr=&b//*ptr和&b都是指针表达式。 pa=array;
2006-09-29 13:16:00
1761
1
转载 第三章。运算符&和*
第三章。运算符&和* 这里&是取地址运算符,*是...书上叫做"间接运算符"。 &a的运算结果是一个指针,指针的类型是a的类型加个*,指针所指向的类型是a的类型,指针所指向的地址嘛,那就是a的地址。 *p的运算结果就五花八门了。总之*p的结果是p所指向的东西,这个东西有这些特点:它的类型是p指向的类型,它所占用的地址是p所指向的地址。 例五: int a=12; int b; int
2006-09-29 13:15:00
1471
转载 第二章。指针的算术运算
第二章。指针的算术运算 指针可以加上或减去一个整数。指针的这种运算的意义和通常的数值的加减运算的意义是不一样的。例如: 例二: 1。 char a[20]; 2。 int *ptr=a; 3。 ptr++; 在上例中,指针ptr的类型是int*,它指向的类型是int,它被初始化为指向整形变量a。接下来的第3句中,指针ptr被加了1,编译器是这样处理的:它把指针ptr的值加上
2006-09-29 13:13:00
1759
转载 第一章。指针的概念
第一章。指针的概念 指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。指针也是一种数据类型,并且也是有值的。要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。让我们分别说明。 先声明几个指针放着做例子: 例一: (1)int *ptr; (2)char *ptr; (3)
2006-09-29 13:12:00
1758
原创 C++数据类型之二:指针
基本数据类型之二:指针一、指针:指针都有一个数据类型,指针的类型可以指示编译器怎么解释特定地址上内存的内容,以及该内存区域应该跨越过多少内存单元。ü 如果一个int 型的指针寻址到1000 内存处那么在32 位机器上跨越的地址空间是1000~1003ü 如果一个double 型的指针寻址到1000 内存处那么在32 位机器上跨越的地址空间是1000~
2006-09-29 11:24:00
3675
原创 C++数据类型之一:常量和变量
C++数据类型之一:常量和变量一、文字常量:常量之所以称为“文字常量”,其中“文字”是指我们只能以它的值的形式指代它,“常量”是指它的值是不可变的。同时注意一点:文字常量是不可寻址的(即我们的程序中不可能出现获取所谓常量20的存储地址&20这样的表达式),虽然常量也是存储在内存的某个地方,但是我们没有办法访问常量的地址的。常量是有类型的:1、 字符型char:一个字节表示,通
2006-09-28 13:31:00
4264
转载 关于MIME的一些知识
MIME是一种技术规范,它原来是用于电子邮件的,现在也可以用于浏览器上,传送可以供浏览器识别的信息,关于MIME的知识并是十分难懂的,有一些基本的计算机概念就可以理解了,但如果要进一步使用,就必须注意内容。实际上,我们在上网的时候就已经接触到了MIME,只是浏览器和服务器在底层实现了。 MIME有时候被错误地理解为多媒体Internet邮件扩展(Multimedia Internet Mail E
2006-09-27 13:28:00
3126
转载 C/C++ 程序设计员应聘常见面试试题深入剖析
找错题 试题1: void test1(){ char string[10]; char* str1 = "0123456789"; strcpy( string, str1 );} 试题2: void test2(){ char
2006-09-19 17:33:00
3348
转载 帮你详细理解端口
一、什么叫端口号 端口号---具有网络功能的应用软件的标识号。注意,端口号是不固定的,即可以由用户手工可以分配(当然,一般在软件编写时就已经定义)。当然,有很多应用软件有公认的默认的端口,比如FTP:20和21,HTTP:80,TELNET:23等等,这里就不一一列举了。一个软件可以拥有多个端口号,这证明这个软件拥有不止一个网络功能
2006-09-14 11:49:00
8396
3
转载 Socket编程原理(2)
Windows Socket 网络编程 —— 套接字编程原理 一、客户机/服务器模式在TCP/IP网络中两个进程间的相互作用的主机模式是客户机/服务器模式(Client/Server model)。该模式的建立基于以下两点:1、非对等作用;2、通信完全是异步的。客户机/服务器模式在操作过程中采取的是主动请示方式:首先服务器方要先启动,并根据请示提供相应服务:(过程如下)1、打开一通信通道
2006-09-14 11:27:00
1853
转载 Socket编程原理(1)
[精华] socket编程原理socket编程原理 socket编程原理 1 问题的引入 UNIX系统的I/O命令集,是从Maltics和早期系统中的命令演变出来的,其模式为打开一读/写一关闭(open-write-read-close)。在一个用户进程进行I/O操作时,它首先调用“打开”获得对指定文件或设备的使用权,并返回称为文件描述符的整型数,以描述用户在打开的文件或设备上进行I/O
2006-09-14 11:22:00
2556
转载 常用内存泄漏检测工具
常用内存泄漏检测工具一、检测已经分配的资源:内存资源使用监听器,只能用在模拟器上:按键组合 功能CTRL+ALT+SHIFT+A 显示已分配堆单元的数量CTRL+ALT+SHIFT+B 显示已分配的文件服务器资源的数量CTRL+ALT+SHIFT+C
2006-09-12 15:34:00
3450
转载 使用日志类RFileLogger输出调试信息
使用日志类RFileLogger输出调试信息一、概述:类RFileLogger对应的头文件和库文件分别是flogger.h和flogger.lib。我习惯把opening代码放到我希望跟踪的class的ConstructL()函数里面,然后在析构函数里closing.在真正编码时,你最好检测一下Connect和CreateLog是否返回了KErrNone.二、使用:1、在类
2006-09-12 15:31:00
2044
1
原创 Symbian OS 之活动对象
Symbian OS 之活动对象一、概述:Symbian OS是一个多任务的操作系统,那么为了实现多任务,同时使系统能够快速响应,高效的进行事件处理,并减轻应用程序员的工作负担(申请大多数耗时的操作(例如文件系统)由服务提供器来完成,服务提供器完成程序员提交的请求后,将会返回给程序员一个成功或失败的信号。), Symbian OS特意引入了活动对象的概念。服务提供器API具有函数的异步
2006-09-12 15:27:00
3897
2
原创 Symbian OS异常三步曲之三:两段构造
Symbian OS异常三步曲之三:两段构造为了在堆上分配一个CExample对象内存空间,调用该类的构造函数,如果构造函数本身就异常退出了,那么分配给对象的内存和构造函数中已经分配的内存都将泄漏,因此,C++的构造函数绝对不能发生异常。如果,为了初始化一个对象,必须要编写发生异常的代码,例如内存分配或读取可能丢失的文件,损坏了的配置文件等,这时候,就需要使用两段构造了。一、两段构造的格式
2006-09-12 15:24:00
1534
1
原创 Symbian异常三步曲之二清除栈
Symbian异常三步曲之二清除栈一、为什么使用清除栈清除栈主要是用来处理在异常退出发生时那些或许可以称之为被遗弃或泄漏的内存。看下面的代码:void UnsafeFunctionL(){ CClanger* clanger = new(ELeave) CClanger(); clanger->InitializeL(); …….
2006-09-12 15:23:00
1797
原创 Symbian OS异常三步曲之一:异常退出(leave)
Symbian OS异常三步曲之一:异常退出(leave)Symbian的异常处理有别于标准C++的异常处理机制,主要原因是最初在设计Symbian的异常处理机制时,C++还没有引入异常处理,但是从Symbian OS 9.1开始,Symbian开始支持标准C++的try—catch异常处理机制,不过考虑到系统开销以及兼容性的因素,我们提倡使用Symbian特有的异常处理机制即异常退出。一
2006-09-12 15:13:00
1797
原创 Symbian OS之客户-服务器架构
Symbian OS之客户-服务器架构活动对象中需要的所有异步服务,都是服务器通过客户-服务器架构来提供的。上图中Kernel Server是灰色的,表示内核服务器不能被用户直接访问使用,它是用来管理其他服务器的。服务器一般采取插件结构,这样更容易实现模块话,容易管理。客户-服务器架构允许:1、 可扩展性:可以添加新插件模块以服务于新对象类型。2、 有效性:
2006-08-18 16:53:00
3669
2
转载 visual C++ 6.0开发工具与调试
1、 如何快速地规范代码缩进格式选中所需要规范的代码,按shift+F82、 如何在Release状态下进行调试Project->Setting=>ProjectSetting对话框,选择Release状态。C/C++标签中的Category选General,Optimizations选Disable(Debug),Debut info选Progra
2006-08-18 14:26:00
1364
转载 静态链接库和动态链接库(转)
我们可以创建一种文件里面包含了很多函数和变量的目标代码,链接的时候只要把这个文件指示给链接程序就自动地从文件中查找符合要求的函数和变量进行链接,整个查找过程根本不需要我们操心。这个文件叫做 “库(Libary)”,平时我们把编译好的目标代码存储到“库”里面,要用的时候链接程序帮我们从库里面找出来。静态链接库: 在早期库的组织形式相对简单,里面的目标代码只能够进行静态链接,所以我们称为“静态库”,
2006-08-16 17:47:00
7745
1
转载 Symbian错误码大全
一般错误KErrNone 0 KErrNotFound -1 不能找到指定对象 KErrGeneral -2 一般错误(不可预料) KErrCancel -3 操作被取消 KErrNoMemory -4 内存不足 KErrNotSupported -5 该请求操作不被支持 KErrArgument -6 错误请求 KErrTotalLossOfPrecision -7 精度全损
2006-08-16 14:12:00
9569
转载 namespace名字空间小解
一、标准名字空间的理解: using namespace std;就是标准名字空间的引用,std是C++标准库中的名字空间名称。大家都知道,当我们定义了一个类,而声明对象的时候就要用到 class_name 后跟对象名称,标准名字空间也是这个用法。 其实,我们可以按照一个更为抽象包含更广的类来理解标准名字空间。#include中的iostream正是包含在这个标准名字
2006-08-11 15:57:00
1942
原创 在派生类中使用对象成员时,构造函数和析构函数的作用过程。
请看如下一段代码:class A {public:A () { pValue = new int[100]; printf("Constructor of A/n"); }~A () { delete [] pValue; printf("Deconstructor of A/n"); }private:int * pValue;}; class B {public:~B () { prin
2006-08-11 15:06:00
2077
转载 手机项目管理完整规范流程
目 录 1 概述... 32 项目流程控制 32.1 市场调研和项目定向 32.1.1 采集用户需求(见用户需求采集分析部分) 32.1.2 指定项目负责人 32.1.3 合理组建需要的各个部门并指定负责人 32.1.4 制
2006-08-08 10:54:00
4769
转载 网络socket编程指南
网络socket编程指南 http://www.chinaunix.net 作者:流浪者 发表于:2003-04-11 17:09:07
2006-08-07 09:14:00
1366
原创 经典题目:strcpy函数
题目:已知strcpy函数的原型是:char * strcpy(char * strDest,const char * strSrc);1.不调用库函数,实现strcpy函数。2.解释为什么要返回char *。解说:1.strcpy的实现代码char * strcpy(char * strDest,const char * strSrc){if ((strDest==NULL)||(strSr
2006-08-05 15:32:00
9900
5
原创 Avkon视图切换架构之调试小结
Avkon视图切换架构之调试小结----Symbian OS传统程序架构续在我看来,理解了传统的Symbian OS程序架构可以轻松的帮助我们理解Avkon视图切换架构,因为我们可以事先理解一些看起来比较抽象的概念,比如容器,窗口,复合控件等,了解一下最基本的Symbian程序框架。实际上,Avkon视图切换架构无非就是在传统的Symbian程序架构上做的一种扩展而已。最大的区别就是多了一
2006-08-05 15:29:00
3474
3
转载 Symbian 函数或类与头文件和LIB库对照表
"AgnDateTime" ,"agmdate.h ", "agnmodel.lib ","AgnEntryStorer" ,"agmentry.h ", "agnmodel.lib ","AgnModel" ,"agmcomon.h ", "agnmodel.lib ","AknBorderId" ,"aknborders.h ", "","AknCommonDialogs" ,"akncomm
2006-08-04 14:56:00
5093
原创 基于控件的传统symbian OS架构之调试小结
基于控件的传统symbian OS架构之调试小结之前写过一个关于symbian常用程序架构的帖子,不过当时是在简单的看了看书本的条件下写的,仅仅是当时做的一个笔记而已,并没有多少自己的感想体会在里面。当然现在也不能就对传统的symbian os架构很了解了,因为毕竟没有做太多深入的研究试验,仅仅是根据自己的想法做了几个小程序而已。 从四个小程序上来分析: 一、在屏幕上显示两个L
2006-08-03 18:52:00
2413
2
原创 关于方法CEikonEnv::Static()方法和宏iEikonEnv的使用区别。
为了实现音乐文件的浏览,即查找功能,我们需要产生一个对话框窗口,如下:真机运行时,该窗口之前还有一个选择手机或存贮卡的窗口,因为模拟器不具备扩展卡,所以直接显示上面这个窗口。上面第一个窗口的显示是通过类MGFetch的RunL()方法产生。第二个窗口的显示是通过iEikonEnv或者是CEikonEnv::Static()产生的。那么iEikonEnv和CEikonEnv::S
2006-07-31 15:03:00
2105
转载 Symbian内存管理的二十二条军规
1、C类必须有析构函数,这是CBase的一个虚函数。2、C类的构造函数和ConstructL()必须为protect或private类型的成员函数3、在C class中必须有一个NewLC()函数,除非它是嵌套类。NewL()是可选的,并且总是根据NewLC()来实现。4、NewL()和NewLC()在c class中必须是static函数。5、C类通过指针和引用来传递。6、拷贝构造函数在symb
2006-07-30 11:16:00
1163
转载 如何定义一个完整的类
定义一个类时必须搞清楚的几个问题: 需要构造函数吗? 如果答案为 no,那么很可能你需要定义的只是一个结构,而不是一个类,因为构造函数的用途是用一种明确定义的状态来设置对象。 数据成员是私有的吗? 一般来说,如果数据成员为公有,你很难控制这些成员何时被访问。 需要一个无参数的构造函数吗
2006-07-28 22:39:00
8000
转载 C++程序员的必备工具
C++程序员的必备工具所谓“工欲善其事,必先利其器”,从程序员的角度来讲,好工具的使用总会给人带来事半功倍的效果。面对众多工具/软件,我们应该如何取舍呢。前不久,笔者在csdn的c++论坛发了一篇 贴文 ,以期能征求大家的广泛意见,得到了不错的反响。本文在对该贴进行整理的基础上,又做了一些补充。在这里要特别感谢网友:DanielWYO(爱上小白),redleaves(无心红叶)。 有以下几点需要声
2006-07-28 22:36:00
5706
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人