C++教程1.docx

上传人:b****3 文档编号:4135791 上传时间:2023-05-06 格式:DOCX 页数:91 大小:77.78KB
下载 相关 举报
C++教程1.docx_第1页
第1页 / 共91页
C++教程1.docx_第2页
第2页 / 共91页
C++教程1.docx_第3页
第3页 / 共91页
C++教程1.docx_第4页
第4页 / 共91页
C++教程1.docx_第5页
第5页 / 共91页
C++教程1.docx_第6页
第6页 / 共91页
C++教程1.docx_第7页
第7页 / 共91页
C++教程1.docx_第8页
第8页 / 共91页
C++教程1.docx_第9页
第9页 / 共91页
C++教程1.docx_第10页
第10页 / 共91页
C++教程1.docx_第11页
第11页 / 共91页
C++教程1.docx_第12页
第12页 / 共91页
C++教程1.docx_第13页
第13页 / 共91页
C++教程1.docx_第14页
第14页 / 共91页
C++教程1.docx_第15页
第15页 / 共91页
C++教程1.docx_第16页
第16页 / 共91页
C++教程1.docx_第17页
第17页 / 共91页
C++教程1.docx_第18页
第18页 / 共91页
C++教程1.docx_第19页
第19页 / 共91页
C++教程1.docx_第20页
第20页 / 共91页
亲,该文档总共91页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

C++教程1.docx

《C++教程1.docx》由会员分享,可在线阅读,更多相关《C++教程1.docx(91页珍藏版)》请在冰点文库上搜索。

C++教程1.docx

C++教程1

前言

我写了一些程序,然后对每一个程序做了简短的讲述。

本来是想把面向对象的理论与C++语言分开来讲的,但是考虑到C++本身就是面向对象理论的很好的应用,所以我尽量把它们结合在一起讲,并且通过实际程序的分析,在程序中向你介绍C++语言,在程序中和你一起习惯于用面向对象的方法来思考和解决问题。

然而是不是以前学过的面向过程的方法不重要了呢?

我认为不是的。

其实,在我们用C++编程的时候,比如说,一个类的成员函数的具体实现,也就是当我们把问题缩小到最基本的环节的时候,用的还是面向过程的方法;所以我认为,面向对象与面向过程并不是两个截然不同的思想,只不过两者考虑问题的角度、范围不同。

怎样读我写的内容呢?

我想提几点建议:

1-仔细地阅读一遍所有的程序;我选择这些程序,就是因为它们从不同的角度体现的C++的内容。

2-如果看不明白程序,可能是程序中涉及了C++的新内容,你可以先看一下程序后面的讲解,或者说是注释。

注释部分是我对该程序的解释,在其中我比较详细地讨论了一些我认为重要的知识点;措辞方面若有不当之处,一定要告诉我,谢谢。

3-不能只看,要去思考,要动手去写,多上机调试。

我给你的之所以是这份打印出来的内容,而不是磁盘上的文件,就是要你自己去实践的。

而且你要试着自己写一些程序,我想一定会有帮助的。

还有一点一定要和你说的,就是学习C++语言是一个基础,不要认为这是根本,根本是我们要用它来解决实际的问题。

但是这个基础又是相当重要的。

在VC++环境中,我们还是要自己添加许多程序代码的。

VC++给我们以更多的自由发挥空间。

VC++的语言内容和C++语言本身是紧密相关的。

所以我们应该也非常必要学习C++语言,重要的是学习这种语言的思想;然后再来看VC++中的程序会明白的。

为了便于说明,我把程序标上行号,请对照阅读。

我常常会把好几个知识点(那些琐碎的东西)放在一个程序中,这可能会带来一些问题,但我尽量说得仔细一些,避免理解上的错误。

最后祝你阅读顺利!

目录

第一篇C++基础…………………………………………………01

C++语言最小框架……………………………………………01

标准输出流……………………………………………………02

变量、标准输入流……………………………………………04

简单运算………………………………………………………06

基本语句………………………………………………………08

数组、字符串与指针…………………………………………09

结构体…………………………………………………………11

无名联合………………………………………………………14

函数原型说明、重载与缺省参数……………………………15

内联函数………………………………………………………17

全局变量与局部变量…………………………………………18

引用……………………………………………………………18

第二篇C++的类…………………………………………………21

类的定义………………………………………………………21

基于类的链表…………………………………………………24

构造函数、析构函数的运行…………………………………26

运算符重载……………………………………………………28

静态存储类型…………………………………………………31

静态成员函数…………………………………………………34

第三篇C++核心…………………………………………………36

简单继承………………………………………………………38

构造函数赋值…………………………………………………41

继承链…………………………………………………………42

多重继承………………………………………………………44

友元类…………………………………………………………51

友元类、友元函数……………………………………………54

类指针…………………………………………………………57

基类、派生类指针……………………………………………58

虚函数…………………………………………………………59

函数模板………………………………………………………62

类模板…………………………………………………………64

后记…………………………………………………………………66

参考文献……………………………………………………………67

第一篇C++基础

内容提要

这一篇讲的是C++的非面向对象方面的内容,是进行程序设计的基本知识。

它讲述了C++中C语言的成分,以及C++对C语言的扩展,当然这些内容也就是程序设计的基本概念了。

 

//ex010001.cpp

//C++语言的最小框架。

00main()

01{

02}

这是最简单的C++程序,它什么也不做,只是一个基本的框架。

main是程序的入口点。

它和C语言没什么不同。

因为C++是C语言的一个扩展,有一种说法就是C++是“带类的C语言”。

但是一定不要简单地认为C++就是C的超集,当我们使用C++的时候,我们的思想和用C语言编程的时候是有很大的不同的。

因为C++是真正的面向对象的语言:

Object-OrientedLanguage,我们要慢慢地习惯于用面向对象的思考方法去解决问题。

下面举的一些例子,许多完全可以用C语言来实现它,但是如果这样做的话,是一种倒退。

如果你对C语言不是很熟悉,不要紧。

学习C++的过程也就是巩固和掌握C语言的过程。

C与C++都是语言,况且后者是在前者的基础上发展起来的,因此,我认为,两者有相通之处。

尤其是这一篇,涉及了许多C语言方面的内容。

但是更主要的是:

你将对C++语言有一个初步的了解。

C++沿用了C语言的习惯,程序的基本结构有很大的相似。

它一般包含以下两个主要成分:

[包含文件]

[主控文件]

前者中有用#include包含的库文件、用户文件(就是你自己编写的)、定义文件等内容。

这样,C++就继续保持着C语言简练的优秀特性,使我们能层次分明地了解程序的结构、组成。

后者就是main()函数的内容了。

它是程序的入口点。

如C语言一样,C++实际源代码包含在一个或多个源文件中,然后,被编译、连接起来。

在VC++集成环境中,鼓励你把定义文件、实现文件分开,这是有好处的。

但是当我们进行Windows下编程的时候,有时候我们在编译环境中看不到main这个头。

看到的是WinMain(主要是以前用C来进行Windows3.x下编程的时候),这其实就是Windows下的程序入口了。

现在我们很可能连这个也找不到,当我们用MFC进行VC++程序设计的时候,就是这种情况。

其实MFC类库已经把主函数包含进去了。

关于这些内容,暂且不做讨论。

值得一提的是:

如果在一个程序中多次包含了同一个文件,则会引起重复定义的错误。

如包含了两次mycpp.h这个定义文件。

可以这样解决:

在书写mycpp.h的时候,写成如下的形式:

#ifndefMYCPP_H

#defineMYCPP_H

……//mycpp.h里的定义内容

#endif

//ex010002.cpp

//有关C++中的标准输出流的。

01#include

02#include

03

04voidmain(void)

05{

06cout<<10101<

07cout<<0.123<

08cout<<1<<0<<1<<0<<1<

09cout<<”MyNumberis:

”<<10101<

10cout<<”MyNameisTom!

\n”;

11

12cout<<”Oct:

”<

13cout<<”Hex:

”<

14cout<<”Dec:

”<

15

16cerr<<”Thismessageisdisplayedonscreen.\n”;

17

18cout<<”MyNumberis:

”<

19cout<<”MyNumberis:

”<

20}

上面这个程序的输出是:

10101

0.123

10101

MyNumberis:

10101

MyNameisTom!

Oct:

25

Hex:

15

Dec:

21

Thismessageisdisplayedonscreen.

MyNumberis:

10101

MyNumberis:

10101

这个程序关于C++中的输出流cout的。

iostream.h是一个很重要的头文件,它提供了有关输入输出操作的基本函数和宏定义。

当我们用#include把它包含进来后,我们在程序中可以使用在iostream.h文件中的定义的类、函数等;C++编译你的程序时,将把你所用到的过程联编到你的.obj和.exe等文件中,没有用到的不会编译到你的程序中去的。

00行说明的就是这些内容。

在01行包含iomanip.h后,17、18行中的setw()就可以使用了,它用来设置输出数据的宽度。

cout是一种类对象,后面的cin也一样。

它们有自己的实现函数。

以后我们再来研究。

现在要知道的就是cout实现的功能相当于C语言中的printf函数,它是向屏幕输出内容的。

从05-09行我们可以看出,用cout输出时,我们不必指定输出内容的类型,我们只须把内容给出就行了,由cout自动识别。

‘<<’是一个‘重定向’符。

这里我借用Dos的一个命名。

在Dos命令窗中,比如有一个可执行文件abc.exe,它向屏幕输出一百个整数;如果我们输入abc>>a.txt,那么一百个整数将输入到文件a.txt中。

上面说,cout是一个输出流,姑且可以认为它是代表显示器,那么用cout<<10101就表示把10101输出到显示器上(以后可以看到它不同的功能)。

我们看一下15行,cerr的作用也是输出内容,但是它叫做‘出错输出流’。

意思是它输出的内容表明一个错误信息,或是输出一个强制可见的信息。

其实它在输出信息的作用上和cout是一致的。

只是当我们在Dos命令窗口中进行重定向时,它输出的信息不会被重定向到指定的文件中;当我们在文件abc.exe中有cerr输出语句,那么它的内容将始终输出到屏幕上,执行abc>>a.txt,文件a.txt中不会有cerr的输出内容。

你在上面的程序中看到的endl,它表示回车换行,如5-8行中所示。

而在字符串中‘\n’也代表这个意思,如9、15行所示。

11-13行指定输出数据的形式。

这是一种格式化输出。

如果觉得有问题的话,想一想printf函数(printf(“%o%x%d”,21,21,21);效果是一样的)。

C++在输出整数时缺省是一十进制(Dec)的形式;如果在某处说明了输出形式,那么后续的输出豆浆使用这种形式。

如果把12行改为cout<<21<

C++用//来表示注释,这一行其后的内容就全部是注释部分;如第2行。

当然也可使用/*与*/来把整段内容作为注释,这是沿用C语言的习惯。

注意,用/*与*/注释是不能嵌套的,也就是不能有这样的形式:

/*

/*

……

*/

……

*/

 

//ex010003.cpp

//C++中变量、标准输入流的。

01#include

02voidmain(void)

03{

04charcTemp;//-128To127

05intnTemp;//-32768To32767或–65536To65535

06unsigneduTemp;//0To65535

07longlTemp;//-2147483648To2147483647

08floatfTemp;//-3.4*10exp(-38)To3.4*10exp(38)

09doubledTemp;//-1.7*10exp(-308)Tom1.7*10exp(308)

10

11cTemp=’a’;

12nTemp=123;

13uTemp=12345;

14lTemp=1234567;

15fTemp=1.23;

16dTemp=1.233

17cout<<”input:

char,int,uint,long,float,double:

”<

18cin>>cTemp;

19cin>>nTemp>>uTemp>>lTemp;

20cin>>fTemp>>dTemp;

21

22cout<<”char:

”<

23cout<<”int:

”<

24cout<<”unsigned:

”<

25cout<<”long:

”<

26cout<<”float:

”<

27cout<<”double:

”<

28}

C++中的变量说明的规则与C是相同的。

各个基本变量的值域如3-8行注释所示。

不同的编译器在规定上有一些差别,如Vc++定义int型为4Byte,而BorlandC++定义其为2Byte。

10-15行是对已经说明的变量进行赋值。

在对变量进行赋值的时候,一定要注意它的取值范围,若超出它的范围,会发生溢出错误。

对于溢出,如果把结果化成二进制的形式去理解,是比较直观的。

17-18行是C++中的输入操作,类似于C中的scanf。

它是一个输入流,与cout的作用正好相反。

‘>>’是另一中‘重定向’符,也称为抽取符。

你可以把它看作是从键盘上输入的流(与cout类似,你可以认为cerr代表显示器)。

然后赋给后面跟着的变量,如17行。

18、19行则是一次输入几个变量值得语句,这里‘>>’似乎又取到了分隔符的作用,当你从键盘上输入各个值后,会一一对应到相应的变量。

若输入的内容与变量的类型不一致,则会发生错误。

你可以试一试这个程序,观察一下运行情况。

在我们说明一个变量的时候,应尽量使用比较直观的名称,而且最好使用所谓的‘西班牙’命名法。

如程序中所示:

指在一个变量名前直观地指出它的类型。

如字符型就在它前面冠以‘c’,短整型就在它前面冠以‘n’等等。

下面列出了这些前缀及其含义:

前缀

含义

b

布尔型

c

字符型

dw

(32位)无符号长整数

F

位标志,组装成一个16位整数

H

16位句柄

L

(32位)长整数

Lp

(32位)长指针

N

(16位)短整数

P

(16位)短指针

Pt

X和y坐标,组装成一个无符号32位整数

Rgb

RGB颜色值,组装成一个32位整数

w

(16位)无符号短整数

在Windows下,系统用typedef为我们定义了许多新的数据类型的名字及结构类型的名字,便于记忆。

常用的有:

类型

含义

BOOL

16位布尔值

LONG

32位有符号整数

HANDLE

用做句柄的16位无符号整数

HWND

在窗口中用做句柄的16位无符号整数

LPSTR

32位指向char类型的指针

FARPROC

32位函数指针

另外,当我们使用浮点型数据的时候,一定要注意它的精度。

通常,你如果要打印一个float型变量a,它的值为0.3999999。

你使用cout<

所以我们应尽量避免两个浮点数之间的比较:

floata,b;

a=0.123456780;

b=0.123456784;

if(a==b)

{

//result_1

}

else

{

//result_2

}

上面的程序段,if语句中result_1的内容将被执行。

 

//ex010004.cpp

//关于简单运算。

01#include

02voidmain(void)

03{

04inta;

05a=3;

06

07cout<

08cout<

09cout<<++a<<’‘;

10cout<

11}

我在这里只强调一下自加运算(自减运算同理),其它的凡是C语言支持的运算,C++是全部适用的。

而扩展部分我将在后续的章节中一一指出。

自加运算分为后缀与前缀,记住:

a++指使用了a的值以后再使a加1;++a指使用a的值以前先使a的值加1;

上面程序的结果是:

3455

至于运算的优先级,是一个细节问题,我们经常会忽略它的。

在实际运算中,还涉及到从左到右和从右到左计算的问题。

计算下面程序片断中变量a的值(初始值:

a=1,b=2):

a=b+a+++a,++b+a;

结果:

a=5。

不能硬性的记背优先级,而是应当在具体的应用中不断地了解、掌握它。

下表列出的内容有许多是全新的,在以后才涉及。

你可以把它作为一个参考表,有问题的时候查看一下。

运算符

名称

实例

:

:

作用域分辨符

class_name:

:

class_member_name

:

:

全局作用域分辨符

:

:

variable_name

.

成员选择符

object.member_name

->

成员选择符

pointer->member_name

[]

下标

pointer[element]

()

函数调用

expression(parameters)

()

构造值

type(parameters)

Sizeof

对象大小

sizeofexpression

Sizeof

类型大小

sizeof(type)

++

后缀递增

Variable++

++

前缀递增

++variable

--

后缀递减

Variable--

--

前缀递减

--variable

&

引用运算符

&variable

*

地址运算符

*pointer

New

分配内存运算符

newtype

Delete

释放内存运算符

deletepointer

delete[]

释放数组运算符

delete[]pointer

~

求反运算符

~expression

!

NOT运算符

!

expression

+

一元加法

+1

-

一元减法

-1

()

类型转换符

(type)expression

.*

成员选择符

object.*pointer

->*

成员选择符

object->*pointer

*

乘法运算符

expression*expression

/

除法运算符

expression/expression

%

取模运算符

expression%expression

+

加法运算符

expression+expression

-

减法运算符

expression-expression

 

//ex010005.cpp

//这里是关于基本语句:

判断、循环等。

01#include

02

03voidmain(void)

04{

05for(intnum=’0’;num<=9;num++)

06if(num%2==0)cout<

07cout<

08

09inta;

10cin>>a;

11switch(a)

12{

13case0:

14case2:

15case4:

16case6:

17case8:

cout<<”Itisanevennumber.”<

18break;

19case1:

20case3:

21case5:

22case7:

23case9:

cout<<”Itisanoddnumber.”<

24}

25

26a=1;

27while(a<1)

28{

29cout<

30a++;

31}

32cout<

33

34a=1;

35do

36{

37cout<

38a++;

39}while(a<1)

40}

C++中的if-else、switch、for、while、do-while等语句是组成该语言的基本成分。

值得一提的是,在

上面是一个简单的程序。

要注意的是,while语句与do-while语句的区别。

上面24-30行是没有输出结果的。

而32-37行执行后将输出1。

象这些语言上的细节,希望应用的时候仔细一点。

也许你以为这没什么大不了的,但是我曾经在这方面有过错误的。

看一下第3行,num变量在for语句中说明;第7行说明了一个新的变量a。

它们的有效范围是从说明开始到程序段结束。

 

//ex010006.cpp

//我们来讨论数组与字符串。

01#include

02#include

03voidmain(void)

04{

05intAn_Array[20];

06charA_String[20];

07

08for(inti=0;i<20;i++)

09{

10An_Array[i]=i;

11A_String[i]=’a’+i;

12}

13A_String[i]=’\0’;

14

15for(i=0;i<20;i++)

16cout<

17cout<

18

19charTemp_String[10];

20strcpy(Temp_String,A_String+10);

21cout<

22

23cout<<”Inputastring:

”;

24cin>>A_String;

25cout<<”Thestringinputtedis:

”<

26cout<<”Uppercase:

”<

27cout<<”Lowercase:

”<

28}

说到数组、字符串,我们很自然地要谈起指针。

你知道,被执行的程序,或者确切点说,进程,它的代码,数据最终都要放到内存中才能使用的。

这里我们讨论它的数据。

内存是一个一维的线性空间,每一个单元都有唯一的编号(当然这些编号是人为的),为了取得内存中的数据,我们首先要知道这个编号,也就是所谓的地址,而指针呢?

是一个专业化的名词罢了,它实际上指的就是那个编号(地址)。

数组和字符串提供了用一个名称来代表一堆相同类型数据(后者只是字符)的方法。

在C++语言中,数组中数据的类型始终是一致的。

其实,数组(字符串说到底是一种特殊的数组)这种表示方法是基于‘偏移量’的思想的,也就是

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2