C++
Ranige
java开发
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
4.9、C++函数的嵌套调用
C++不允许对函数作嵌套定义,也就是说在一个函数中不能完整地包含另一个函数。在一个程序中每一个函数的定义都是互相平行和独立的。虽然C++不能嵌套定义函数,但可以嵌套调用函数,也就是说,在调用一个函数的过程中,又调用另一个函数。在程序中实现函数嵌套调用时,需要注意的是:在调用函数之前,需要对每一个被调用的函数作声明(除非定义在前,调用在后)。【例4.9】用弦截法求方程f(x)原创 2015-03-06 11:30:10 · 2488 阅读 · 0 评论 -
4.8、函数的默认参数
一般情况下,在函数调用时形参从实参那里取得值,因此实参的个数应与形参相同。有时多次调用同一函数时用同样的实参,C++提供简单的处理办法,给形参一个默认值,这样形参就不必一定要从实参取值了。如有一函数声明: float area(float r=6.5);指定r的默认值为6.5,如果在调用此函数时,确认r的值为6.5,则可以不必给出实参的值,如: area( ); //相当于原创 2015-03-06 11:27:48 · 550 阅读 · 0 评论 -
4.11、局部变量和全局变量
局部变量在一个函数内部定义的变量是内部变量,它只在本函数范围内有效,也就是说只有在本函数内才能使用它们,在此函数以外是不能使用这些变量的。同样,在复合语句中定义的变量只在本复合语句范围内有效。这称为局部变量(local variable)。如:对局部变量的一些说明:1) 主函数main中定义的变量(m, n)也只在主函数中有效,不会因为在主函数中定义而在整个文件或程序中有效原创 2015-03-06 11:35:00 · 817 阅读 · 0 评论 -
4.12、变量的存储类别
动态存储方式与静态存储方式我们已经了解了变量的作用域。作用域是从空间的角度来分析的,分为全局变量和局部变量。变量还有另一种属性——存储期(storage duration,也称生命期)。存储期是指变量在内存中的存在期间。这是从变量值存在的时间角度来分析的。存储期可以分为静态存储期(static storage duration)和动态存储期(dynamic storage du原创 2015-03-06 11:43:09 · 461 阅读 · 0 评论 -
4.13、变量属性小结
一个变量除了数据类型以外,还有3种属性:存储类别 C++允许使用auto,static,register和extern 4种存储类别。作用域 指程序中可以引用该变量的区域。存储期 指变量在内存的存储期限。以上3种属性是有联系的,程序设计者只能声明变量的存储类别,通过存储类别可以确定变量的作用域和存储期。要注意存储类别的用法。auto, static和register 3种存原创 2015-03-06 11:44:34 · 441 阅读 · 0 评论 -
4.14、变量的声明和定义
我们已经知道,一个函数一般由两部分组成:声明部分和执行语句。声明部分的作用是对有关的标识符(如变量、函数、结构体、共用体等)的属性进行说明。对于函数,声明和定义的区别是明显的,前边已说明,函数的声明是函数的原型,而函数的定义是函数功能的确立。对函数的声明是可以放在声明部分中的,而函数的定义显然不在函数的声明部分范围内,它是一个文件中的独立模块。对变量而言,声明与定义的关系稍微复杂一原创 2015-03-06 13:59:17 · 474 阅读 · 0 评论 -
3.12、编写选择结构的程序
下面,通过两个实例来说明如何编写较为复杂的C++程序。【例3.8】编写程序,判断某一年是否为闰年。#include using namespace std;int main( ){ int year; bool leap; cout<<"please enter year:";//输出提示 cin>>year; //输入年份 if (year%4==0原创 2015-03-06 09:26:35 · 478 阅读 · 0 评论 -
3.15、循环的嵌套
几种循环的比较:1) 3种循环都可以用来处理同一问题,一般情况下它们可以互相代替。2) while和do-while循环,是在while后面指定循环条件的,在循环体中应包含使循环趋于结束的语句(如i++,或i=i+1等)。for循环可以在表达式3中包含使循环趋于结束的操作,甚至可以将循环体中的操作全部放到表达式3中。因此for语句的功能更强,凡用while循环能完成的,用for原创 2015-03-06 09:40:40 · 680 阅读 · 0 评论 -
5.2、C++一维数组
定义一维数组定义一维数组的一般格式为: 类型标识符 数组名[常量表达式];例如: int a[10];它表示数组名为a,此数组为整型,有10个元素。获得数组的长度:sizeof(arry)/sizeof(arry[int]),int可以为任意整数关于一维数组的几点说明:1) 数组名定名规则和变量名相同,遵循标识符定名规则。2) 用方括号括起原创 2015-03-06 17:22:07 · 1005 阅读 · 0 评论 -
5.1、C++数组的概念
概括地说:数组是有序数据的集合。要寻找一个数组中的某一个元素必须给出两个要素,即数组名和下标。数组名和下标惟一地标识一个数组中的一个元素。数组是有类型属性的。同一数组中的每一个元素都必须属于同一数据类型。一个数组在内存中占一片连续的存储单元。如果有一个整型数组a,假设数组的起始地址为2000,则该数组在内存中的存储情况如图5.1所示。图 5.1引入数组就不需要在程序原创 2015-03-06 16:52:25 · 554 阅读 · 0 评论 -
4.19、C++条件编译
一般情况下,在进行编译时对源程序中的每一行都要编译。但是有时希望程序中某一部分内容只在满足一定条件时才进行编译,也就是指定对程序中的一部分内容进行编译的条件。如果不满足这个条件,就不编译这部分内容。这就是“条件编译”。有时,希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句。条件编译命令常用的有以下形式:1) #ifdef 标识符 程序段1#e原创 2015-03-06 16:33:59 · 556 阅读 · 0 评论 -
3.8、关系运算与逻辑运算
往往要求根据某个指定的条件是否满足来决定执行的内容。例如,购物在1000元以下的打九五折,1000元及以上的打九折。C++提供if语句来实现这种条件选择。如: if amount else tax=0.9; //若amount pay=amount*tax; //pay为实付款流程可以用图3.4表示。图 3.4关系运算和关系表达原创 2015-03-06 09:01:14 · 1817 阅读 · 0 评论 -
3.9、if else 语句
if语句的3种形式1) if(表达式) 语句。例如: if(x>y) cout这种if语句的执行过程见图3.5(a)。2) if(表达式) 语句1 else 语句2例如: if (x>y) cout else cout见图3.5(b)。图 3.53) if(表达式1) 语句1 else if(表达原创 2015-03-06 09:01:39 · 569 阅读 · 0 评论 -
4.5、内置函数
调用函数时需要一定的时间和空间的开销。 C++提供一种提高效率的方法,即在编译时将所调用函数的代码直接嵌入到主调函数中,而不是将流程转出去。这种嵌入到主调函数中的函数称为内置函数(inline function),又称内嵌函数。在有些书中把它译成内联函数。指定内置函数的方法很简单,只需在函数首行的左端加一个关键字inline即可。【例4.4】函数指定为内置函数。原创 2015-03-06 11:06:30 · 408 阅读 · 0 评论 -
4.6、函数的重载
在编程时,有时我们要实现的是同一类的功能,只是有些细节不同。例如希望从3个数中找出其中的最大者,而每次求最大数时数据的类型不同,可能是3个整数、3个双精度数或3个长整数。程序设计者往往会分别设计出3个不同名的函数,其函数原型为: int max1(int a, int b, int c); //求3个整数中的最大者 double max2(double a, double b原创 2015-03-06 11:17:40 · 504 阅读 · 0 评论 -
4.7、C++函数模版
C++提供了函数模板(function template)。所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表。这个通用函数就称为函数模板。凡是函数体相同的函数都可以用这个模板来代替,不必定义多个函数,只需在模板中定义一次即可。在调用函数时系统会根据实参的类型来取代模板中的虚拟类型,从而实现了不同函数的功能。看下面的例子就清楚了。【例4.7】将例原创 2015-03-06 11:23:05 · 368 阅读 · 0 评论 -
java中的重载
java允许在一个类中,多个方法拥有相同的名字,但在名字相同的同时,必须有不同的参数,这就是重载,编译器会根据实际情况挑选出正确的方法,如果编译器找不到匹配的参数或者找出多个可能的匹配就会产生编译时错误,这个过程被称为重载的解析 1 普通方法的重载 普通方法的重载是Java实现多态技术的重要手段,为编程带来了很多便利 当方法同名时,为了让编译器区别他们,至少需要下面之一不同 1 参原创 2015-03-06 11:14:44 · 282 阅读 · 0 评论 -
4.10、函数的递归调用
在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归(recursive)调用。C++允许函数的递归调用。例如:int f(int x){ int y, z; z=f(y); //在调用函数f的过程中,又要调用f函数 return (2*z);}以上是直接调用本函数,见图4.9。图4.10表示的是间接调用本函数。在调用f1函数过程中要调原创 2015-03-06 11:31:47 · 756 阅读 · 0 评论 -
4.16、C++预处理命令
可以在C++源程序中加入一些“预处理命令”(preprocessor directives),以改进程序设计环境,提高编程效率。预处理命令是C++统一规定的,但是它不是C++语言本身的组成部分,不能直接对它们进行编译(因为编译程序不能识别它们)。现在使用的C++编译系统都包括了预处理、编译和连接等部分,因此不少用户误认为预处理命令是C++语言的一部分,甚至以为它们是C++语句,这是不对的。原创 2015-03-06 14:42:06 · 538 阅读 · 0 评论 -
4.15、内部函数和外部函数
函数本质上是全局的,因为一个函数要被另外的函数调用,但是,也可以指定函数只能被本文件调用,而不能被其他文件调用。根据函数能否被其他源文件调用,将函数区分为内部函数和外部函数。内部函数如果一个函数只能被本文件中其他函数所调用,它称为内部函数。在定义内部函数时,在函数名和函数类型的前面加static。函数首部的一般格式为: static 类型标识符 函数名(形参表);如原创 2015-03-06 14:19:10 · 628 阅读 · 0 评论 -
4.17、C++宏定义
可以用#define命令将一个指定的标识符(即宏名)来代表一个字符串。定义宏的作用一般是用一个短的名字代表一个长的字符串。它的一般形式为: #define 标识符 字符串这就是已经介绍过的定义符号常量。如: #define PI 3.1415926还可以用#define命令定义带参数的宏定义。其定义的一般形式为: #define 宏名(参数表) 字符串如:原创 2015-03-06 15:16:06 · 484 阅读 · 0 评论 -
4.18、C++文件包含处理
文件包含的作用所谓“文件包含”处理是指一个源文件可以将另外一个源文件的全部内容包含进来,即将另外的文件包含到本文件之中。C++提供了#include命令用来实现“文件包含”的操作。如在file1.cpp中有以下#include命令: #include ″file2.cpp″它的作用见图4.18示意。图4.18“文件包含”命令是很有用的,它可以节省程序设原创 2015-03-06 15:26:56 · 731 阅读 · 0 评论 -
5.9、C++处理字符串方法
用字符数组来存放字符串并不是最理想和最安全的方法。C++提供了一种新的数据类型——字符串类型(string类型),在使用方法上,它和char、int类型一样,可以用来定义变量,这就是字符串变量——用一个名字代表一个字符序列。实际上,string并不是C++语言本身具有的基本类型,它是在C++标准库中声明的一个字符串类,用这种类可以定义对象。每一个字符串变量都是string类的一个对原创 2015-03-09 15:04:47 · 440 阅读 · 0 评论 -
5.6、字符串和字符串结束标志
用一个字符数组可以存放一个字符串中的字符。如: char str[12]={'I',' ','a','m',' ','h','a','p','p','y'};用一维字符数组str来存放一个字符串″I am happy″中的字符。字符串的实际长度(10)与数组长度(12)不相等,在存放上面10个字符之外,系统对字符数组最后两元素自动填补空字符′\0′。为了测定字符串的实际长度,原创 2015-03-09 14:14:18 · 986 阅读 · 0 评论 -
5.8、字符串处理函数
字符串连接函数 strcat其函数原型为 strcat(char[],const char[]);strcat是string catenate(字符串连接)的缩写。该函数有两个字符数组的参数,函数的作用是:将第二个字符数组中的字符串连接到前面字符数组的字符串的后面。第二个字符数组被指定为const,以保证该数组中的内容不会在函数调用期间修改。连接后的字符串放在第一个字符数组中,函原创 2015-03-09 14:45:32 · 533 阅读 · 0 评论 -
5.3、C++二维数组
具有两个下标的数组称为二维数组。有些数据要依赖于两个因素才能惟一地确定,例如有3个学生,每个学生有4门课的成绩,显然,成绩数据是一个二维表,如书中表5.1所示。表5.1 学生成绩数据表学生序号课程1课程2课程3课程4课程5学生18578999688学生27689759775学生3原创 2015-03-09 11:24:55 · 1393 阅读 · 0 评论 -
5.5、C++字符数组
用来存放字符数据的数组是字符数组,字符数组中的一个元素存放一个字符。字符数组具有数组的共同属性。由于字符串应用广泛,C和C++专门为它提供了许多方便的用法和函数。字符数组的定义和初始化定义字符数组的方法与前面介绍的类似。例如: char c[10]; c[0]=′I′;c[1]=′ ′;c[2]=′a′;c[3]=′m′;c[4]=′ ′;c[5]=′h′;c[6]原创 2015-03-09 14:02:32 · 693 阅读 · 0 评论 -
5.7、字符数组的输入输出
字符数组的输入输出可以有两种方法:1) 逐个字符输入输出,如例5.9。2) 将整个字符串一次输入或输出。例如有以下程序段: char str[20]; cin>>str; //用字符数组名输入字符串 cout在运行时输入一个字符串,如: China↙在内存中,数组str的状态如图5.9所示,在5个字符的后面自动加了一个结束符′\0′。原创 2015-03-09 14:30:30 · 1779 阅读 · 0 评论 -
6.1、指针的概念
为了说清楚什么是指针,必须弄清楚数据在内存中是如何存储的,又是如何读取的。如果在程序中定义了一个变量,在编译时就给这个变量分配内存单元。系统根据程序中定义的变量类型,分配一定长度的空间。例如,C++编译系统一般为整型变量分配4个字节,为单精度浮点型变量分配4个字节,为字符型变量分配1个字节。内存区的每一个字节有一个编号,这图6.1就是“地址”。图6.1请务必弄清楚一原创 2015-03-09 15:13:40 · 476 阅读 · 0 评论 -
6.2、变量与指针
指针变量是一种特殊的变量,它和以前学过的其他类型的变量的不同之处是:用它来指向另一个变量。为了表示指针变量和它所指向的变量之间的联系,在C++中用“*”符号表示指向,例如,i_pointer是一个指针变量,而*i_pointer表示i_pointer所指向的变量,见图6.3。下面两个语句作用相同: i=3; *i_pointer=3;图 6.3定原创 2015-03-09 16:34:56 · 600 阅读 · 0 评论 -
6.3、指针作为函数参数
函数的参数不仅可以是整型、浮点型、字符型等数据,还可以是指针类型。它的作用是将一个变量的地址传送给被调用函数的形参。【例6.3】题目同例6.2,即对输入的两个整数按大小顺序输出。这里用函数处理,而且用指针类型的数据作函数参数。程序如下:#include using namespace std;int main( ){ void swap(int *p1,int *p2); /原创 2015-03-09 17:19:44 · 847 阅读 · 0 评论 -
5.4、用数组名作为函数参数
常量和变量可以用作函数实参,同样数组元素也可以作函数实参,其用法与变量相同。数组名也可以作实参和形参,传递的是数组的起始地址。用数组元素作函数实参由于实参可以是表达式,而数组元素可以是表达式的组成部分,因此数组元素当然可以作为函数的实参,与用变量作实参一样,将数组元素的值传送给形参变量。【例5.6】用函数处理例5.5。算法和例5.5是一样的,今设一函数max_value原创 2015-03-09 11:38:22 · 1792 阅读 · 0 评论 -
3.4、C++输入输出
输入和输出并不是C++语言中的正式组成成分。C和C++本身都没有为输入和输出提供专门的语句结构。输入输出不是由C++本身定义的,而是在编译系统提供的I/O库中定义的。C++的输出和输入是用“流”(stream)的方式实现的。图3.2和图3.3表示C++通过流进行输入输出的过程。有关流对象cin、cout和流运算符的定义等信息是存放在C++的输入输出流库中的,因此如果在程序中使用原创 2015-03-05 15:33:42 · 466 阅读 · 0 评论 -
2.1、C++数据类型
计算机处理的对象是数据,而数据是以某种特定的形式存在的(例如整数、浮点数、字符等形式)。不同的数据之间往往还存在某些联系(例如由若干个整数组成一个整数数组)。数据结构指的是数据的组织形式。例如,数组就是一种数据结构。不同的计算机语言所允许使用的数据结构是不同的。处理同一类问题,如果数据结构不同,算法也会不同。例如,对10个整数排序和对包含10个元素的整型数组排序的算法是不同的。图2原创 2015-03-05 14:33:07 · 691 阅读 · 0 评论 -
2.8、强制类型转换
在表达式中不同类型的数据会自动地转换类型,以进行运算。有时程序编制者还可以利用强制类型转换运算符将一个表达式转换成所需类型。例如: (double)a (将a转换成double类型) (int)(x+y) (将x+y的值转换成整型) (float)(5%3) (将5%3的值转换成float型)强制类型转换的一般形式为: (类型名)(表达式)原创 2015-03-05 14:44:40 · 1280 阅读 · 0 评论 -
2.10、逗号运算符与逗号表达式
C++将赋值表达式作为表达式的一种,使赋值操作不仅可以出现在赋值语句中,而且可以以表达式形式出现在其他语句(如输出语句、循环语句等)中。这是C++语言灵活性的一种表现。请注意,用cout语句输出一个赋值表达式的值时,要将该赋值表达式用括号括起来,如果写成“coutC++提供一种特殊的运算符——逗号运算符。用它将两个表达式连接起来。如 3+5, 6+8称为逗号表达式,又原创 2015-03-05 15:01:06 · 567 阅读 · 0 评论 -
2.11、C++所有运算符及优先级
优先级操作符描述例子结合性1()[]->.::++--调节优先级的括号操作符数组下标访问操作符通过指向对象的指针访问成员的操作符通过对象本身访问成员的操作符作用域操作符后置自增操作符后置自减操作符(a + b) / 4;array[4] = 2;ptr->age = 34;obj.age = 34;原创 2015-03-05 15:01:41 · 526 阅读 · 0 评论 -
2.6、算数运算符与算数表达式
基本的算术运算符在本章中主要介绍算术运算符与算术表达式,赋值运算符与赋值表达式,逗号运算符与逗号表达式,其他运算符将在以后各章中陆续介绍。常见算数运算符运算符说明举例+加法运算符,或正值运算符3+5,+3-减法运算符,或负值运算符5-2,-3*乘法运算符3*5/除法运算符原创 2015-03-05 14:41:56 · 883 阅读 · 0 评论 -
3.1、面向过程的程序设计和算法
关于算法,在C语言教程中已经讲述(请查看C语言算法),已查看的读者或者有编程经验的读者请跳过这里。在面向过程的程序设计中,程序设计者必须指定计算机执行的具体步骤,程序设计者不仅要考虑程序要“做什么”,还要解决“怎么做”的问题,根据程序要“做什么”的要求,写出一个个语句,安排好它们的执行顺序。怎样设计这些步骤,怎样保证它的正确性和具有较高的效率,这就是算法需要解决的问题。算法的概念原创 2015-03-05 15:05:23 · 1198 阅读 · 0 评论 -
3.2、C++程序和语句
由第1章已知,一个程序包含一个或多个程序单位(每个程序单位构成一个程序文件)。每一个程序单位由以下几个部分组成:预处理命令。如#include命令和#define命令。声明部分。例如对数据类型和函数的声明,以及对变量的定义。函数。包括函数首部和函数体,在函数体中可以包含若干声明语句和执行语句。如下面是一个完整的C++程序:#include //预处理命令using names原创 2015-03-05 15:15:11 · 571 阅读 · 0 评论
分享