cpp知识易忘点完整版自己整理.docx

上传人:b****1 文档编号:2449009 上传时间:2022-10-29 格式:DOCX 页数:31 大小:37.63KB
下载 相关 举报
cpp知识易忘点完整版自己整理.docx_第1页
第1页 / 共31页
cpp知识易忘点完整版自己整理.docx_第2页
第2页 / 共31页
cpp知识易忘点完整版自己整理.docx_第3页
第3页 / 共31页
cpp知识易忘点完整版自己整理.docx_第4页
第4页 / 共31页
cpp知识易忘点完整版自己整理.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

cpp知识易忘点完整版自己整理.docx

《cpp知识易忘点完整版自己整理.docx》由会员分享,可在线阅读,更多相关《cpp知识易忘点完整版自己整理.docx(31页珍藏版)》请在冰豆网上搜索。

cpp知识易忘点完整版自己整理.docx

cpp知识易忘点完整版自己整理

本部分总结知识点分为两部分:

第一部分为面向对象部分;第二部分为面向过程部分

1.类和对象

面向过程的结构化设计中:

程序=数据结构+算法

面向对象的程序设计中:

对象=数据结构+算法;程序=对象+对象+….+消息

类是对象的抽象,对象是类的具体实例。

2.类和结构体声明异同

形式上相似(把struct换成class,C++中有结构体是为了兼容C语言)

不同:

类中若为声明是公有的和还是私有的,则默认是私有的,结构体相反,私有的只能被本类中的成员函数调用。

3.类外定义成员函数

在类中做成员函数声明,类外定义成员函数,在类外定义时,需要注意:

定义时,在函数类型和函数名之间需要加上类变量和:

是作用域限定符。

4.Inline成员函数

Inline的作用是在调用该函数时,将该函数的代码复制插入到函数调用点。

而不是流程专区函数入口地址,执行完函数代码段后返回调用点。

类外定义和类内声明的函数需要在前面加上inline。

需要说明的是:

只有但函数规模很小且调用频繁时,才将此采用函数定义为内置函数。

5.内成员函数的存储方式

函数代码是存储在对象之外的,C++为此专门定义一个this指针,用来指向不同对象调用此成员函数。

这样,每个对象占用的空间只是只是对象数据部分所占用的空间,不包括函数代码。

6.类声明和成员函数定义分离

●将类的声明放在一个文件夹中(头文件****.h),用户想用该类直接包含头文件即可。

●成员函数的定义放在另一个文件中(***.cpp),这个文件需要编译生成目标代码。

可以把编译后形成的目标文件保存起来,以后需要时把它调出来与程序的目标文件(main.obj)链接即可。

成员函数定义不放在头文件中的好处就可以看出来,不用每次使用这个类时都对成员函数编译。

●类声明头文件就称为用户使用类库的有效方法和公共接口。

7.面向对象几个名词

“方法”:

类的成员函数在面向对象理论中被称为“方法”,方法是对数据的操作。

“信息”:

外界通过发“信息”来激活有有关方法,此方法必须是公用的。

如classstudent

{

Public:

voiddisplay();

*****

};

Intmian()

{

Studentstu;

Stu.display();//向对象“stu”发出一个“消息”(Stu.display())通知它执行其中的“方法”(display函数)

}

8.对象初始化

类的数据成员不能在声明类时初始化的,如果一个类的成员全是公用的,则可以在定义对象时进行初始化,这样就和结构体相似。

9.构造函数

用构造函数来处理对象的初始化。

特点:

一种特殊的成员函数,与其他成员函数不同,不需要用户来调用它,而是在建立对象时自动执行(而不是在申明类是对数据成员赋值)。

构造函数的名字必须与类同名。

可以在类内也可以在类外定义构造函数。

●带参数的构造函数

如构造函数名(类型1形参1,类型2形参2……)

●用参数初始化表对数据成员初始化

如,Box:

:

Box(inth,intw,intlen)):

height(h),width(w),height(len){}

●构造函数的重载

一个类中可以定义多个构造函数,这些够着参数具有相同的名字,参数的个数和类型不相同。

10.析构函数

作用:

不是删除对象,而是在撤销对象占用的内存之前完成一些清理工作。

最主函数调用结束,在撤销对象之前的最后一项工作室调用析构函数。

●构造函数与析构函数的顺序

先构造的后析构,后构造的先析构。

(特性相同的是这样,若特性不相同(作用域不同,))则结果也不一样。

11.对象数组

Studentstu[N];//Student为已声明的类,N为常数

对象数组初始化

如studentstu[3]={

Student(***),

Student(***),

Student(***)

};

12.对象指针

对象空间的起始地址就是对象的的指针。

定义指向类对象的一般形式:

类名*对象指针;

如Time*p,t1;//Time为已声明的类

P=&t1

则以下等价:

*p//t1

(*pt).hour或者pt->hour//t1.hour

(*pt).get_time()或者pt->get_time()//t1.get_time

13.指向对象成员的指针

●指向对象数据的指针(与定义普通变量指针相同)

数据类型名*指针变量名

●指向对象成员函数的指针

普通函数的指针变量定义形式:

数据类型名(*指针变量名)(参数列表)

指针变量名=函数名

指向公用成员函数的指针变量形式:

数据类型名(类名:

*指针变量名)(参数列表)

指针变量名=&类名:

成员函数名;

如,

#include

Usingnamespacestd;

ClassTime

{

Public:

Time(int,int,int);

Inthour,minute,sec;

Voidget_time();

};

Time:

:

Time(inth,intm,ints)//构造函数

{

hour=h;minute=m;sec=s;

}

VoidTime:

:

get_time()//类外定义成员函数

{

Cout<

”<

”<

}

Intmian()

{

Timet1(10,13,56);//定义Time类对象t1

Int*p1=&t1.hour;//定义指向整型数据的指针变量p1,使之指向t1.hour

Cout<<*p1<

Time*p2=&t1;//定义指向Time类对象的指针变量p2,使之指向t1

P2->get_time();//调用p2所指向的对象的get_time()函数

Void(Time:

:

*p3)();//定义指向Time类公用成员函数的指针变量p3

P3=&Time:

:

get_time();//p3指向Time类公用成员函数get_time

(t1.*p3)();//调用对象t1中p3所指向的成员函数,即t1.get_time()

}

14.this指针

每一成员函数都包含一个特殊指针,之歌指针的名字是固定的,称为this。

它的值是当前被调用的成员函数所在的对象的起始地址。

如调用成员函数volume():

a.volume(),实际上是把对象a的起始地址赋给this指针。

则return(height*width*length)等价于return((this->height)*(this->width)*(this->length))就相当于return((a.height)*(a.width)*(a.length))

15.共用数据的保护

增加数据的安全性:

是数据在一定范围内共享,又要保证它不被任意修改,使用const。

●常对象

常对象中的数据成员为长变量且必须要有初值。

如Timeconstt1(12,34,56;则t1中的数据成员都不能被修改。

形式:

类名const对象名[(实参列表)]或者const类名对象名[(实参列表)]

编译时,编译系统检查函数的声明,只要发现调用的常对象的成员函数,而该成员函数违背声明为const,就会报错。

那么怎么调用?

将成员函数声明为const。

Voidget_time()const;//注意const在后面

●常对象成员

常数据成员:

只能通过构造函数的初始化表对常数据成员进行初始化。

如,数据成员:

constinthour;

非法:

Time:

Time(inth){hour=h;}

合法:

Time:

Time(inth):

hour(h){}

常成员函数:

只能引用本类中的数据成员,而不能修改它们。

声明:

voidget_time()const//注意const的位置在函数名和括号之后

常对象只保证其所有数据成员的值不被修改;如果已定义了一个常对象,则只能调用其中const成员函数,而不能调用非const成员函数;常成员函数不能调用另一个非const成员函数。

修改常对象中成员数据的值,可以将成员数据前加“mutable”

●指向对象的常指针

将指向对象的指针变量声明为const,并使之初始化,这样指针值始终保持为其初值,不能改变,即其指向始终不变。

一般形式:

类名*const指针变量名=对象地址

注意:

定义指针变量时使之初始化。

Time*constptr1=&t1;

Ptr1=&t2//不合法,ptr1不能改变指向

●指向常变量的指针变量

如果一个变量已被声明为常变量,只能用指向常变量的指针变量指向它,而不是一般的指针变量。

如,constcharc[]=”boy”;

Constchar*p1;

P1=c;

Char*p2=c;//不合法,p2不是指向常变量的指针变量。

指向常变量的指针变量还可以指向违背声明为const的变量,但此时不能通过指针变量修改该变量的值。

如果函数的形参是执行非const型变量指针,实参只能是用指向非const变量的指针,而不能用指向const变量的指针。

●指向常对象的指针变量

同样,如果一个对象已被声明为常对象,只能用指向常对象的指针变量指向它,而不能用一般的指针变量指向它。

同样,定义了一个指向常对象的指针变量,并使它指向一个非const的对象,则其指向的对象是不能通过指针来改变的,但是指针变量本身的值是可以改变的。

且指向常对象的指针变量只能引用常成员函数。

如,

Timet1(10,12,15),t2;//定义Time类对象t1和t2,是非const型对象。

ConstTime*p=&t1;//定义p为指向常对象的指针变量,并指向t1

t1.hour=18;//合法,t1不是常变量

(*p).hour=18;//非法,不能通过指针变量改变t1的值

P=&t2;//p改为指向t2,合法

●对象的动态建立和释放

用到对象时才建立对象,在不需要时节撤销它,释放它占有的内存空间以供别的数据使用,从而提高内存的利用率。

如,对一个已经定义的Box类

Box*pt;//定义一个指向Box类对象的指针变量pt

pt=newBox;//在pt中存放了新建对象的起始地址

******

Cout<height;

******

Deletept;//释放pt指向的内存空间

●对象的赋值和复制

对象的赋值形式:

对象名1=对象名2;//两个必须是同类

不同对象的数据成员占有不同的存储空间,赋值的过程是讲一个对象的数据成员在存储空间的状态赋值给里一个对象的数据成员的存储空间。

对象复制的一般形式:

类名对象2(对象1);//用对象1复制出对象2

或者:

类名对象2=对象1;

●静态成员

全局变量的值可以为各函数共享,但全局变量的安全性不能保证,任一个函数都可以改变全局变量的值。

在同类的多个变量之间实现数据的共享,可以用静态的数据成员。

一般形式:

声明时:

static数据类型数据成员

静态数据成员初始化只能在类体外,形式:

数据类型类名:

静态数据成员名=初值;

静态数据成员不属于某一个对象,在为对象所分配的空间中不包括静态数据成员所占的空间。

静态数据成员是在所有对象之外单独开辟空间。

未对静态数据成员赋初值时默认为0,但不能用参数初始化表对静态数据成员初始化

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

当前位置:首页 > 职业教育 > 职高对口

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1