cpp知识易忘点完整版自己整理Word下载.docx
《cpp知识易忘点完整版自己整理Word下载.docx》由会员分享,可在线阅读,更多相关《cpp知识易忘点完整版自己整理Word下载.docx(31页珍藏版)》请在冰豆网上搜索。
只有但函数规模很小且调用频繁时,才将此采用函数定义为内置函数。
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(***)
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<
iostream>
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<
<
hour<
”:
”<
minute<
sec<
endl;
Intmian()
Timet1(10,13,56);
//定义Time类对象t1
Int*p1=&
t1.hour;
//定义指向整型数据的指针变量p1,使之指向t1.hour
*p1<
//输出t1.hour
Time*p2=&
t1;
//定义指向Time类对象的指针变量p2,使之指向t1
P2->
get_time();
//调用p2所指向的对象的get_time()函数
Void(Time:
*p3)();
//定义指向Time类公用成员函数的指针变量p3
P3=&
//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(inth):
hour(h){}
常成员函数:
只能引用本类中的数据成员,而不能修改它们。
声明:
voidget_time()const//注意const的位置在函数名和括号之后
常对象只保证其所有数据成员的值不被修改;
如果已定义了一个常对象,则只能调用其中const成员函数,而不能调用非const成员函数;
常成员函数不能调用另一个非const成员函数。
修改常对象中成员数据的值,可以将成员数据前加“mutable”
●指向对象的常指针
将指向对象的指针变量声明为const,并使之初始化,这样指针值始终保持为其初值,不能改变,即其指向始终不变。
一般形式:
类名*const指针变量名=对象地址
注意:
定义指针变量时使之初始化。
Time*constptr1=&
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=&
//定义p为指向常对象的指针变量,并指向t1
t1.hour=18;
//合法,t1不是常变量
(*p).hour=18;
//非法,不能通过指针变量改变t1的值
t2;
//p改为指向t2,合法
●对象的动态建立和释放
用到对象时才建立对象,在不需要时节撤销它,释放它占有的内存空间以供别的数据使用,从而提高内存的利用率。
如,对一个已经定义的Box类
Box*pt;
//定义一个指向Box类对象的指针变量pt
pt=newBox;
//在pt中存放了新建对象的起始地址
******
Cout<
p->
height;
******
Deletept;
//释放pt指向的内存空间
●对象的赋值和复制
对象的赋值形式:
对象名1=对象名2;
//两个必须是同类
不同对象的数据成员占有不同的存储空间,赋值的过程是讲一个对象的数据成员在存储空间的状态赋值给里一个对象的数据成员的存储空间。
对象复制的一般形式:
类名对象2(对象1);
//用对象1复制出对象2
或者:
类名对象2=对象1;
●静态成员
全局变量的值可以为各函数共享,但全局变量的安全性不能保证,任一个函数都可以改变全局变量的值。
在同类的多个变量之间实现数据的共享,可以用静态的数据成员。
声明时:
static数据类型数据成员
静态数据成员初始化只能在类体外,形式:
数据类型类名:
静态数据成员名=初值;
静态数据成员不属于某一个对象,在为对象所分配的空间中不包括静态数据成员所占的空间。
静态数据成员是在所有对象之外单独开辟空间。
未对静态数据成员赋初值时默认为0,但不能用参数初始化表对静态数据成员初始化