C++
电脑小玩家
探索底层原理,分享实用工具
展开
-
C++ 中的成员对象(学习笔记)
【概念】成员对象:当一个类的成员是另一个类的对象时,这个对象就叫成员对象。概括的说,就是一个类的成员是一个对象,即成员对象。例如:#includeusing namespace std;class Date{ ...}; //创建一个对象Date,类体略class Time{ Date d1 , d2;}; //创建一个对象Time,该对象有两个数据成员d1原创 2008-02-19 10:25:00 · 14995 阅读 · 3 评论 -
默认参数与函数重载
一、默认参数在C++中,可以为参数指定默认值。在函数调用时没有指定与形参相对应的实参时, 就自动使用默认参数。默认参数的语法与使用:(1)在函数声明或定义时,直接对参数赋值。这就是默认参数;(2)在函数调用时,省略部分或全部参数。这时可以用默认参数来代替。注意:(1)默认参数只可在函数声明中设定一次。只有在无函数声明时,才可以在函数定义中设定。(2)默认参数定义的顺序为自右到左。即如果一个参数原创 2008-04-06 08:16:00 · 1378 阅读 · 0 评论 -
变量类型辨析
extern(外部变量) static(静态变量) auto(自动变量或局部变量)原创 2008-04-05 11:21:00 · 1021 阅读 · 1 评论 -
C++笔记(数组)
1、数组下标: (1)在定义时必须明确。 ①只能用正整数或const常量,静态或全局变量不可以; ②(特) 在new时可以用变量做下标。 (2)在初始化时: ①一维数组,可略; ②二维数组,其一维可略,二维不能略。 (3)在作参数时: ①一维数组,略;(写了也被略去)原创 2008-04-08 17:01:00 · 896 阅读 · 0 评论 -
函数传值经典教程
一个程序,就是main()的调用过程。 每一个子函数都有自己的作用域。子函数中的运算是不能改变main()中已经定义的变量。例如:int add(int a, int b){ int c;c=a+b;}main(){int a=1,b=2, c=0;add(a,b);printf("/nc=%d/n", c);}你看看 最后结果还是c=0。解析:因为计算机执行一个程序的时候,它只看到mai转载 2008-04-06 12:12:00 · 577 阅读 · 0 评论 -
赋值号=和( )
在C++中,有两种赋值方法:1、使用 = 显式赋值如 int a =3; char b = 0 ;2、使用( )隐含赋值如 int a(3); char b(0); 对于对象之间的复制,也可以使用( )来进行。原创 2008-04-06 12:58:00 · 1220 阅读 · 0 评论 -
指针与数组
声明:char、string类型的数组和指针有另外的特性,请参看:字符、字符数组、char、string的区别分析1、指向变量的指针与指向数组的指针区别 对普通变量 对数组原创 2008-04-15 15:18:00 · 673 阅读 · 0 评论 -
数组作参数
数组作参数传递时,如果将整个数组传递的话,将导致溢出。所以在实际传递时,传递的是数组的首地址,即传递的指针。所以不能使用sizeof计算数组元素个数。所以在传递时,必须给出数组名称和元素个数。例: #includeiostream>using namespace std;void Sum(int array[],int n){ int sum=0; for(int i=0;原创 2008-05-02 17:37:00 · 1033 阅读 · 0 评论 -
字符数组与字符串
1、 字符数组相当于字符串 2、其末尾字符为 /0 3、其长度=有效字符数+1,在定义字符数组长度时切记。 4、初始化方法 ① char arr[6] = {"hello"}; ② char arr[6] = "hello"; //与第①种相同,一般使用这一个 ③ char arr[6] = {h,e,l,l,o,/0}; //主要在特殊字符时使用 5、"a" 和原创 2008-05-02 18:57:00 · 1771 阅读 · 0 评论 -
函数的传值与传址
函数的传值与传址 副题:使用指针修改函数参数 题注:许多教程用的是“使用指针修改函数”,个人感觉实际上讲的传值和传址的特点,传值无法完成数据交换,传址可以实现数据交换。 函数传递参数时,只是把实参的复制品(拷贝)传给形参,而实参本身并不动。 所以要想让实参发生变化,应使用两种方式: 1、 return返回值。这种方式虽然不能改变实参的值,但是可以得到变化的值。 2、用指针传址。这种方式通过间接原创 2008-05-03 12:51:00 · 1399 阅读 · 0 评论 -
数组长度计算
(1)sizeof 方法:sizeof(数组名)/ sizeof(数组类型名) 说明:数组占用字节除以数组类型所占字节,结果为数组元素个数 (2)strlen 说明:strlen,求字符串有效长度 方法:strlen(字符数组名) //结果为字符数组有效字符长度,不包括末尾的 /0注意:当数组作为函数参数传递时,数组名代表的是数组的首址,原创 2008-05-02 17:10:00 · 16426 阅读 · 3 评论 -
字符、字符数组、char、string的区别分析
【规则】1、string为普通类型,不是数组型,只是其内容为字符串;2、’a’和”a”的区别:’a’为字符,”a”为字符串;单引号只能定义一个字符,双引号可以定义多个字符,即字符串。3、指针可以通过加减、自加减改变其值,数组不可以。4、以数组定义的字符串可以修改其中的字符,以指针定义的字符串不能修改其中的字符。 例如:char a[]=”hello”;coutc原创 2008-05-05 18:24:00 · 3223 阅读 · 1 评论 -
[C语言]Scanf()函数详细介绍篇
[C语言]Scanf()函数详细介绍篇2008-05-03 18:16 [摘自CSDN] 函数名: scanf 功 能: 执行格式化输入 用 法: int scanf(char *format[,argument,...])原创 2008-05-05 18:32:00 · 4045 阅读 · 0 评论 -
typedef的用法(待整理合并)
源自:http://dev.csdn.net/develop/article/70/70084.shtm合并源:http://blog.csdn.net/rhzwan123/archive/2008/05/07/2408804.aspx typedef是c/c++代码中经常用到的一个关键字. 他的主要做用是给变量类型定义一个别名. 从而达到代码简化, 促进跨平台开发的目的. 下面是typede转载 2008-05-07 12:22:00 · 634 阅读 · 0 评论 -
C++笔记(一)
1、注释: (1) // 在其后面写注释内容,只限本行 (2) /* */ 在其中间写注释内容,可以跨多行(C语言的写法)2、函数调用时,是将实参复制给形参,而实参本身并不改变。3、函数头有返回类型说明时,函数结束时要使用return返回。如果不需要返回,就在函数头声明为void,函数结束时也无需要return。4、c程序经过编辑、编译、连接,最终形成exe文件。原创 2008-04-01 18:54:00 · 860 阅读 · 0 评论 -
指针数组、数组指针、指针函数、函数指针的区别
一、指针数组与数组指针*p[2]:指针数组。 按照符号优先级来看,下标[ ]优先于指针*,所以可以看作是*(p[2]),那么应该首先是一个数组p[2]。而该数组的每个元素都是指针。 (*p)[2]:数组指针。按照符号优先级来看,括号( )优先于[ ],那么应该首先是一个指针。而该指针指向一个数组。二、指针函数与函数指针*p( ):指针函数。理解方法同上,该函数的值是一个指针。(原创 2008-04-01 10:13:00 · 666 阅读 · 0 评论 -
函数调用机制
栈是一种数据结构,它的工作原理就像在子弹匣中压子弹一样,最先压人的子弹要等到最后才飞射出去,而最后压人的子弹则首先飞射出去。 C++的函数调用过程, 需要调用初始化和善后处理的环节。函数调用的整个过程就是栈空间操作的过程。函数调用时,C++首先: (1)建立被调函数的栈空间。 (2)保护调用函数的运行状态和返回地址。 (3)传递参数。 (4)将控制转交被调函数。 例如,下面的代码在主转载 2008-03-30 14:09:00 · 2148 阅读 · 2 评论 -
C++经典指针问题[转帖]
信息来源:网络译者序: 这是一篇我所见过的关于指针的最好的入门级文章,它可使初学者在很短的时间内掌握复杂的指针操作。虽然,现在的JAVA、C#等语言已经取消了指针,但作为一个C++程序员,指针的直接操作内存,在数据操作方面有着速度快,节约内存等优点,仍是很多C++程序员的最爱。指针就像是一把良剑,就看你怎么去应用它! 有关这篇文章的技术性问题你可以写信给我:webmaster@chinahai转载 2008-02-22 12:10:00 · 1016 阅读 · 0 评论 -
谈C/C++指针精髓(3)[转帖]
1.4指针的运算 1.4.1赋值运算指针变量的赋值运算有以下几种形式:1.4.1.1指针变量初始化赋值如下: int a;int *ip=&a;1.4.1.2把一个变量的地址赋予指向相同数据类型的指针变量。例如: int a;int *ip;ip=&a; //把整型变量a的地址赋予整型指针变量ip1.4.1.3把一个指针变量的值赋转载 2008-02-23 13:32:00 · 661 阅读 · 0 评论 -
深入理解this指针[转帖]
源自《VC++深入详解》 作者:孙鑫、余安萍 编著源地址: 2.2.5 this指针我们再看例2-9所示的这段代码(EX04.CPP):例2-9#include class point{public: int x; int y; point() { x=0; y=0;转载 2008-02-22 12:27:00 · 607 阅读 · 0 评论 -
谈C/C++指针精髓(1)[转帖]
[摘要] 指针是C和C++语言编程中最重要的概念之一,也是最容易产生困惑并导致程序出错的问题之一。利用指针编程可以表示各种数据结构, 通过指针可使用主调函数和被调函数之间共享变量或数据结构,便于实现双向数据通讯;并能像汇编语言一样处理内存地址,从而编出精练而高效的程序。指针极大地丰富了C和C++语言的功能。在本文中,主要分两部分对指针进行讨论。首先,基础篇讨论关于指针的内容和运算操作转载 2008-02-23 10:54:00 · 652 阅读 · 0 评论 -
谈C/C++指针精髓(2)[转帖]
1.3指针与内存管理 利用指针你可以将数据写入内存中的任意位置,但是,一旦你的程序中有一个野指针("wild”pointer),即指向一个错误位置的指针,你的数据就危险了—存放在堆中的数据可能会被破坏,用来管理堆的数据结构也可能会被破坏,甚至操作系统的数据也可能会被修改,有时,上述三种破坏情况会同时发生。所以合理的正确的分配指针的地址是非常重要的。 1.3.1内存分配的方式转载 2008-02-23 13:30:00 · 813 阅读 · 0 评论 -
虚函数、纯虚函数
一、定义.纯虚函数是在基类中声明的虚函数,它在基类中没有定义,但要求任何派生类都要定义自己的实现方法。在基类中实现纯虚函数的方法是在函数原型后加“=0”virtual void funtion1()=0二、引入原因:1、为了方便使用多态特性,我们常常需要在基类中定义虚拟函数。2、在很多情况下,基类本身生成对象是不合情理的。例如,动物作为一个基类可以派生出老虎、孔雀等子类,但动物本身转载 2008-03-08 09:59:00 · 510 阅读 · 0 评论 -
函数声明与函数定义的参数
观点:1、函数声明不需指定参数的名称,只需要每个参数的类型, 而在函数定义时则必须要写出参数名称 。(C++ primer第3版第281页) 如: int abs( int ); int min( int, int ); int gcd( int, int ); //声明时不需要写出参数名称 in原创 2008-03-13 10:42:00 · 2946 阅读 · 0 评论 -
const指针理解
当a为变量时,const指针3种用法 格式 限定对象 备注原创 2008-03-29 11:33:00 · 1031 阅读 · 1 评论 -
指向指针的指针(整理)
一个指针变量可以指向整型变量、实型变量、字符类型变量,当然也可以指向指针类型变量。当这种指针变量用于指向指针类型变量时,我们称之为指向指针的指针变量,这话可能会感到有些绕口,但你想到一个指针变量的地址就是指向该变量的指针时;这种双重指针的含义就容易理解了。下面用一些图来描述这种双重指针,见图6-13。 在图中,整型变量i的地址是&i,将其传递给指针变量p,则p指向i;实型变量j的地址是&j,将其传原创 2008-03-29 11:47:00 · 868 阅读 · 1 评论 -
常量定义
常量是常数或代表固定不变值的名字。 程序中如果想让变量的内容自初始化后一直保持不变,可以定义一个常量。 例如,在圆面积计算中经常要用常数丌,此时,通过命名一个容易理解和记忆的名字来 改进程序的可读性,同时在定义中加关键字const,给它规定为常量性质,以帮助预防程序出错。 如果在整个程序中的许多地方都要用到一个常数,那么,在这些地方的一个或多个地方 写错了转载 2008-03-30 11:37:00 · 4427 阅读 · 0 评论 -
增量和减量
增量和减量操作符表示为:++和--。 增量操作表示加1,减量操作表示减1。例如: a++; //相当于a=a+1; ++a; //相当于a=a+1; a--; //相当于a=a-1; --a; //相当于a=a-1; 增量操作符有前增量与后增量之分。前增量操作++a的意义为:先修改操作数使之增1,然后将增1过的。值作为表达式的值。而后增量操作a++的意义为:先将变量a转载 2008-03-30 11:43:00 · 3525 阅读 · 0 评论 -
逗号表达式
逗号表达式的语法为: 表达式1,表达式2,...表达式n C++顺序计算表达式1,表达式2,……,表达式n的值。例如: int a,b,c; a=l,b=a+2, c=b+3; 由于按顺序求值, 所以能够保证b一定在a赋值之后, c一定在b赋值之后。该逗号表 达式可以用下面3个有序的赋值语句来表示: a=1; b=a+2; c=b转载 2008-03-30 11:47:00 · 1035 阅读 · 0 评论 -
表达式求值与副作用&左值
C++为每个运算符规定了一个优先级和结合性,以控制各运算的顺序, 确保表达式计算的一致性。利用括号可以改变表达式的运算顺序。 左值是能出现在赋值表达式左边的表达式。 如果运算结果超过了该数据类型能够表达的范围,则C++进行截断处理。 参加运算的两个操作数类型不同时, C++将自动作隐式类型转换,但有时侯,不得不作强制类型转换。 前增量操作符通知C++编泽器先增加变量的值,然后再使用转载 2008-03-30 13:12:00 · 1026 阅读 · 0 评论 -
函数原型
标准库函数的函数原型都在头文件中提供,程序可以用#include指令包含这些原型文件。对于用户自定义函数,程序员必须在源代码中说明函数原型。 函数原型是一条程序语句,即它必须以分号结束。它由函数返回类型、函数名和参数表构成,形式为: 返回类型 function(参数表); 参数表包含所有参数的数据类型,参数之间用逗号分开。在C++中,函数声明就是函数原型。 函数原型和函数定义在返回类转载 2008-03-30 13:18:00 · 5732 阅读 · 1 评论 -
全局变量与局部变量
1.程序的内存区域 并不是所有的变量时时刻刻都是可知的。一些变量在整个程序中都是可见的,它们称为全局变量。一些变量只能在一个函数中可知,称为局部变量。要了解变量的这些属性,应先弄清程序在内存中的分布区域,见图5-2。图5-2 程序在内存中的区域 一个程序将操作系统分配给其运行的内存块分为4个区域: (1)代码区,存放程序的代码,即程序中的各个函数代码块。 (2)全局数据区,存放转载 2008-03-30 13:21:00 · 2810 阅读 · 1 评论 -
typedef (待续)
C/C++语言中的typedef相信大家已经不陌生,本文对C/C++语言关键字typedef的各种用法作一个介绍。typedef,顾名思义,为“类型定义”,可以解释为:将一种数据类型定义为某一个标识符,在程序中使用该标识符来实现相应数据类型变量的定义。例如: 1、最常用格式typedef unsigned int UINT; int main (int argc, c转载 2008-05-07 12:19:00 · 779 阅读 · 0 评论