| 订阅 | 在线投稿
分享
 
 
 

C++ 语言基础(1)

来源:互联网网民  宽屏版  评论
2008-06-01 01:27:27

入门简介

变量 C++数据类型 C++操作符 C++中的函数 main函数 数组 字符串数组 字符串操作函数

C++是个强大的语言,可以用于做别的语言做不了的工作。但是,这种强大功能是有代价的。开始使用C++时,你可能会碰到内存溢出和访问失效等问题,使程序死机。这里用最简短的篇幅介绍C++语言基础。C++语言本身有专著介绍,这种书还非凡厚,所以别指望我能用三言两语说清楚。读者学完本书并使用C++ Builder一般时间之后,最后对C++语言再作更深入的了解。

C++可以最充分地利用面向对象编程(OOP)的优势。OOP不只是一个新名词,而有它的实际意义,可以生成可复用的对象。新术语 对象(object),和前面介绍的构件一样,是完成特定编程任务的软件块(构件是对象,但对象不全是构件,稍后会解释这点)。对象只向用户(使用对象的编程人员)显示必须的部分,从而简化对象的使用。用户不必知道的所有内部机制都隐藏在幕后。这一切都包括在面向对象编程的概念中。OOP可以用模块化方法进行编程,从而避免每次从头开始。C++ Builder程序是面向OOP的,因为C++ Builder大量使用构件。生成构件后(你生成的或C++ Builder内置的构件),就可以在任何C++ Builder程序中重复使用。构件还可以扩展,通过继续生成具有新功能的新构件。最妙的是,构件隐藏了所有内容细节,使编程人员能集中精力充分利用构件。

入门简介

在C++之前先有C语言,C++是建立在C语言之上的,称为“带类的C语言”。这个C语言基础在当今的C++程序中仍然很重要。C++并不是取代C,而是补充和支持C。本章余下部分和下几章主要介绍C++中来源于C语言的部分。实际上,这里介绍的是C语言,第2课"C++基础"中才转入C++。读者不必关心哪个来自C,哪个来自C++,因为这些全在C++中。C++语言很难按顺序介绍,因为我们要介绍的所有特性都是交叉的。我预备的一次介绍一块,然后拼凑起来。到第3课"高级C++"结束,你将对C++语言有个完整的了解。一下子没有把握某个概念也没关系,有些概念必须经过实践才能完全了解。

变量

还是从变量讲起来吧。变量(variable)实际上是赋予内存地址的名称。声明变量后,就可以用它操作内存中的数据。下面举几个例子进行说明。下列码段用了两个变量,每条语句末尾用说明语句描述执行该语句时发生的情况:

int x;// variable declared as an integer variable

x = 100;// 'x' now contains the value 100

x +=50;// 'x' now contains the value 150

int y = 150;// 'y' declared and initialized to 150

x += y;// 'x' now contains the value 300

x++;// 'x' now contains the value 301

新术语 变量(variable)是留作存放某个数值的计算机内存地址。注重x的值在变量操作时会改变,稍后会介绍操作变量的C++操作符。警告 声明而未初始化的变量包含随机值。由于变量所指向的内存还没有初始化,所以不知道该内存地址包含什么值。

例如,下列代码

int k;

int y;

x=y+10; //oops!

本例中变量y没有事先初始化,所以x可能取得任何值。例外的情况是全局变量和用static修饰声明的变量总是初始化为0。而所有其它变量在初始化或赋值之前包含随机值。变量名可以混合大写、小写字母和数字与下划线(_),但不能包含空格和其它非凡字符。变量名必须以字母或下划线开始。一般来说,变量名以下划线或双下划线开始不好。变量名答应的最大长度随编译器的不同而不同。假如变量名保持在32个字符以下,则绝对安全。实际中,任何超过20个字符的变量名都是不实用的。

下例是有效变量名的例子:

int aVeryLongVariableName;// a long variable name

int my_variable;// a variable with an underscore

int_ x;// OK,but not advisedint X;// uppercase variable name

int Labe12;// a variable name containing a number

int GetItemsInContainer(); // thanks Pete!

说明 C++中的变量名是考虑大小写的,下列变量是不同的:int XPos;int xpos;假如你原先所用语言不考虑大小写(如Pascal),则开始接触考虑大小写的语言可能不太适应。

C++数据类型

新术语 C++数据类型定义编译器在内存中存放信息的方式。在有些编程语言中,可以向变量赋予任何数值类型。例如,下面是BASIC代码的例子:x = 1;x = 1000;x = 3.14;x = 457000;在BASIC中,翻译器能考虑根据数字长度和类型分配空间。而在C++,则必须先声明变量类型再使用变量:int x1 = 1;int x = 1000;float y = 3.14;long z = 457000;这样,编译器就可以进行类型检查,确保程序运行时一切顺利。数据类型使用不当会导致编译错误或警告,以便分析和纠正之后再运行。有些数据类型有带符号和无符号两种。带符号(signed)数据类型可以包含正数和负数,而无符号(unsigned)数据类型只能包含正数。表1.1列出了C++中的数据类型、所要内存量和可能的取值范围。

表1.1C++数据类型(32位程序)

数据类型 字节 数取值范围

char 1 -128到126

unsigned char 1 0到255

short 2 -32,768到32,767

unsigned short 2 0到65,535

long 4 -2,147,483,648到2,147,483,648

unsigned long 4 0到4,294,967,295

int 4 同long

unsigned int 4 同unsigned long

float 4 1.2E-38到3.4E381

double 8 2.2E-308到1.8E3082

bool 1 true或false

从上表可以看出,int与long相同。那么,为什么C++还要区分这两种数据类型呢?实际上这是个遗留问题。在16位编程环境中,int要求2个字节而long要求4个字节。而在32位编程环境中,这两种数据都用4个字节存放。C++Builder只生成32位程序,所以int与long相同。说明 在C++ Builder和BorLand C++ 5.0中,Bool是个真正的数据类型。有些C++编译器有Bool要害字,则Bool不是个真正的数据类型。有时Bool只是个typedef,使Bool等价于int。typedef实际上建立别名,使编译器在一个符号与另一符号间划上等号。typedef的语法如下:typedef int Bool;这就告诉编译器:Bool是int的别名。说明 只有double和float数据类型使用浮点数(带小数点的数)。其它数据类型只涉及整数值。尽管integer数据类型也可以指定带小数点的数值,但小数部分会舍弃,只将整数部分赋予整型变量,例如:int x=3.75;得到的x取值为3。注重,这个整数值并不是四舍五入,而是放弃小数部分。顺便说一句,大多数Windows程序很少用到浮点数。C++可以在必要时进行不同数据类型间的换算。例如:short result;long num1 = 200;long num2 = 200;result = num1 * num2;这里我想将两个长整型的积赋予一个短整型。尽管这个公式混用了两种数据类型,但C++能够进行换算。计算结果会怎样呢?结果会让你大吃一惊,是25536,这是绕接(wrop)的结果。从表1.1可以看出,短整型的最大取值为32767,在最大值之上加1会怎么样呢?得到的是32768。这实际上与汽车里程计从99999回到00000的道理一样。为了说明这点,请输入并运行下列清单1.3中包含的程序。

清单1.3Wrapme.cpp

1: #include <iostream.h>

2: #include <conio.h>

3: #pragma hdrstop

4:

5: int main(int argc,char **argv)

6: {

7:short x = 32767;

8:cout << " x = " << x << endl;

9:x++;

10: cout << " x = " << x << endl;

11: getch();

12: return 0;

13: }

说明后面几节要介绍的有些清单没有下列语句:

#include<condefs.h>

C++ Builder生成新的控制台应用程序时会自动加上这条语句。这在你所用的程序中不是必须的,所以代码清单中将其省略。无论有无这条语句,程序运行结果是一致的。分析输出结果为:x=32767 x=32768假如用int数据类型,则不会有这个问题,因为int数据类型的取值范围在正向20亿之间,一般不会有绕回的问题。但这时程序可能会稍大一些,因为int需要4字节存储,而short只需要2字节存储。对于大多数应用程序,这个差别是不显著的。前面介绍了自动类型换算。有时C++无法进行换算,这时可能在编译器中产生编译错误,说Cannot convert from x to y(无法从x换算到Y)。编译器也可能警告说Conversion might lose significant digits(换算可能丢失显著位)。提示 编译器警告应当作编译器错误,因为它表明出了错误。我们应努力生成无警告的编译。有时警告无法避免,但一定要认真检查所有警告。应充分了解警告的原因并尽量予以纠正。

C++操作符

操作符(operator)用于操作数据。操作符进行计算、检查等式、进行赋值、操作变量和进行其它更希奇的工作。C++中有许多操作符,这里不想列出全部,只列出最常用的操作符,如下表所示。表1.2常用C++操作符操作符说明举例

算术运算符

+ 加 x=y+z;

- 减 x=y-z;

* 乘 x=y*z;

/ 除 x=y/z;

赋值运算符

= 赋值 x=10;

+= 赋值与和 x+=10;(等于x=x+10;)

-= 赋值与减 x-=10;

*= 赋值与乘 x*=10;

\= 赋值与除 x\=10;

&= 赋值位与 x&=0x02;

= 赋值位或 x=0x02;

逻辑操作符

&& 逻辑与 if(x && 0xFF) {...}

逻辑或 if(x 0xFF) {...}

等式操作符

== 等于 if(x == 10) {...}

!= 不等于 if(x != 10) {...}

< 小于 if(x < 10) {...}

> 大于 if(x > 10) {...}

<= 小于或等于 if(x &l

 
特别声明:以上内容(如有图片或视频亦包括在内)为网络用户发布,本站仅提供信息存储服务。
 
  入门简介     变量 C++数据类型 C++操作符 C++中的函数 main函数 数组 字符串数组 字符串操作函数 C++是个强大的语言,可以用于做别的语言做不了的工作。但是,这种强大功能是有代价的。开始使用C++时,你可能会碰到内存溢出和访问失效等问题,使程序死机。这里用最简短的篇幅介绍C++语言基础。C++语言本身有专著介绍,这种书还非凡厚,所以别指望我能用三言两语说清楚。读者学完本书并使用C++ Builder一般时间之后,最后对C++语言再作更深入的了解。 C++可以最充分地利用面向对象编程(OOP)的优势。OOP不只是一个新名词,而有它的实际意义,可以生成可复用的对象。新术语 对象(object),和前面介绍的构件一样,是完成特定编程任务的软件块(构件是对象,但对象不全是构件,稍后会解释这点)。对象只向用户(使用对象的编程人员)显示必须的部分,从而简化对象的使用。用户不必知道的所有内部机制都隐藏在幕后。这一切都包括在面向对象编程的概念中。OOP可以用模块化方法进行编程,从而避免每次从头开始。C++ Builder程序是面向OOP的,因为C++ Builder大量使用构件。生成构件后(你生成的或C++ Builder内置的构件),就可以在任何C++ Builder程序中重复使用。构件还可以扩展,通过继续生成具有新功能的新构件。最妙的是,构件隐藏了所有内容细节,使编程人员能集中精力充分利用构件。 入门简介 在C++之前先有C语言,C++是建立在C语言之上的,称为“带类的C语言”。这个C语言基础在当今的C++程序中仍然很重要。C++并不是取代C,而是补充和支持C。本章余下部分和下几章主要介绍C++中来源于C语言的部分。实际上,这里介绍的是C语言,第2课"C++基础"中才转入C++。读者不必关心哪个来自C,哪个来自C++,因为这些全在C++中。C++语言很难按顺序介绍,因为我们要介绍的所有特性都是交叉的。我预备的一次介绍一块,然后拼凑起来。到第3课"高级C++"结束,你将对C++语言有个完整的了解。一下子没有把握某个概念也没关系,有些概念必须经过实践才能完全了解。 变量 还是从变量讲起来吧。变量(variable)实际上是赋予内存地址的名称。声明变量后,就可以用它操作内存中的数据。下面举几个例子进行说明。下列码段用了两个变量,每条语句末尾用说明语句描述执行该语句时发生的情况: int x;// variable declared as an integer variable x = 100;// 'x' now contains the value 100 x +=50;// 'x' now contains the value 150 int y = 150;// 'y' declared and initialized to 150 x += y;// 'x' now contains the value 300 x++;// 'x' now contains the value 301 新术语 变量(variable)是留作存放某个数值的计算机内存地址。注重x的值在变量操作时会改变,稍后会介绍操作变量的C++操作符。警告 声明而未初始化的变量包含随机值。由于变量所指向的内存还没有初始化,所以不知道该内存地址包含什么值。 例如,下列代码 int k; int y; x=y+10; //oops! 本例中变量y没有事先初始化,所以x可能取得任何值。例外的情况是全局变量和用static修饰声明的变量总是初始化为0。而所有其它变量在初始化或赋值之前包含随机值。变量名可以混合大写、小写字母和数字与下划线(_),但不能包含空格和其它非凡字符。变量名必须以字母或下划线开始。一般来说,变量名以下划线或双下划线开始不好。变量名答应的最大长度随编译器的不同而不同。假如变量名保持在32个字符以下,则绝对安全。实际中,任何超过20个字符的变量名都是不实用的。 下例是有效变量名的例子: int aVeryLongVariableName;// a long variable name int my_variable;// a variable with an underscore int_ x;// OK,but not advisedint X;// uppercase variable name int Labe12;// a variable name containing a number int GetItemsInContainer(); // thanks Pete! 说明 C++中的变量名是考虑大小写的,下列变量是不同的:int XPos;int xpos;假如你原先所用语言不考虑大小写(如Pascal),则开始接触考虑大小写的语言可能不太适应。 C++数据类型 新术语 C++数据类型定义编译器在内存中存放信息的方式。在有些编程语言中,可以向变量赋予任何数值类型。例如,下面是BASIC代码的例子:x = 1;x = 1000;x = 3.14;x = 457000;在BASIC中,翻译器能考虑根据数字长度和类型分配空间。而在C++,则必须先声明变量类型再使用变量:int x1 = 1;int x = 1000;float y = 3.14;long z = 457000;这样,编译器就可以进行类型检查,确保程序运行时一切顺利。数据类型使用不当会导致编译错误或警告,以便分析和纠正之后再运行。有些数据类型有带符号和无符号两种。带符号(signed)数据类型可以包含正数和负数,而无符号(unsigned)数据类型只能包含正数。表1.1列出了C++中的数据类型、所要内存量和可能的取值范围。 表1.1C++数据类型(32位程序) 数据类型 字节 数取值范围 char 1 -128到126 unsigned char 1 0到255 short 2 -32,768到32,767 unsigned short 2 0到65,535 long 4 -2,147,483,648到2,147,483,648 unsigned long 4 0到4,294,967,295 int 4 同long unsigned int 4 同unsigned long float 4 1.2E-38到3.4E381 double 8 2.2E-308到1.8E3082 bool 1 true或false 从上表可以看出,int与long相同。那么,为什么C++还要区分这两种数据类型呢?实际上这是个遗留问题。在16位编程环境中,int要求2个字节而long要求4个字节。而在32位编程环境中,这两种数据都用4个字节存放。C++Builder只生成32位程序,所以int与long相同。说明 在C++ Builder和BorLand C++ 5.0中,Bool是个真正的数据类型。有些C++编译器有Bool要害字,则Bool不是个真正的数据类型。有时Bool只是个typedef,使Bool等价于int。typedef实际上建立别名,使编译器在一个符号与另一符号间划上等号。typedef的语法如下:typedef int Bool;这就告诉编译器:Bool是int的别名。说明 只有double和float数据类型使用浮点数(带小数点的数)。其它数据类型只涉及整数值。尽管integer数据类型也可以指定带小数点的数值,但小数部分会舍弃,只将整数部分赋予整型变量,例如:int x=3.75;得到的x取值为3。注重,这个整数值并不是四舍五入,而是放弃小数部分。顺便说一句,大多数Windows程序很少用到浮点数。C++可以在必要时进行不同数据类型间的换算。例如:short result;long num1 = 200;long num2 = 200;result = num1 * num2;这里我想将两个长整型的积赋予一个短整型。尽管这个公式混用了两种数据类型,但C++能够进行换算。计算结果会怎样呢?结果会让你大吃一惊,是25536,这是绕接(wrop)的结果。从表1.1可以看出,短整型的最大取值为32767,在最大值之上加1会怎么样呢?得到的是32768。这实际上与汽车里程计从99999回到00000的道理一样。为了说明这点,请输入并运行下列清单1.3中包含的程序。 清单1.3Wrapme.cpp 1: #include <iostream.h> 2: #include <conio.h> 3: #pragma hdrstop 4: 5: int main(int argc,char **argv) 6: { 7:short x = 32767; 8:cout << " x = " << x << endl; 9:x++; 10: cout << " x = " << x << endl; 11: getch(); 12: return 0; 13: } 说明后面几节要介绍的有些清单没有下列语句: #include<condefs.h> C++ Builder生成新的控制台应用程序时会自动加上这条语句。这在你所用的程序中不是必须的,所以代码清单中将其省略。无论有无这条语句,程序运行结果是一致的。分析输出结果为:x=32767 x=32768假如用int数据类型,则不会有这个问题,因为int数据类型的取值范围在正向20亿之间,一般不会有绕回的问题。但这时程序可能会稍大一些,因为int需要4字节存储,而short只需要2字节存储。对于大多数应用程序,这个差别是不显著的。前面介绍了自动类型换算。有时C++无法进行换算,这时可能在编译器中产生编译错误,说Cannot convert from x to y(无法从x换算到Y)。编译器也可能警告说Conversion might lose significant digits(换算可能丢失显著位)。提示 编译器警告应当作编译器错误,因为它表明出了错误。我们应努力生成无警告的编译。有时警告无法避免,但一定要认真检查所有警告。应充分了解警告的原因并尽量予以纠正。 C++操作符 操作符(operator)用于操作数据。操作符进行计算、检查等式、进行赋值、操作变量和进行其它更希奇的工作。C++中有许多操作符,这里不想列出全部,只列出最常用的操作符,如下表所示。表1.2常用C++操作符操作符说明举例 算术运算符 + 加 x=y+z; - 减 x=y-z; * 乘 x=y*z; / 除 x=y/z; 赋值运算符 = 赋值 x=10; += 赋值与和 x+=10;(等于x=x+10;) -= 赋值与减 x-=10; *= 赋值与乘 x*=10; \= 赋值与除 x\=10; &= 赋值位与 x&=0x02; = 赋值位或 x=0x02; 逻辑操作符 && 逻辑与 if(x && 0xFF) {...} 逻辑或 if(x 0xFF) {...} 等式操作符 == 等于 if(x == 10) {...} != 不等于 if(x != 10) {...} < 小于 if(x < 10) {...} > 大于 if(x > 10) {...} <= 小于或等于 if(x &l
󰈣󰈤
 
 
 
>>返回首页<<
 
 热帖排行
 
 
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
©2005- 王朝网络 版权所有