1、cpp知识易忘点完整版自己整理本部分总结知识点分为两部分:第一部分为面向对象部分;第二部分为面向过程部分1. 类和对象面向过程的结构化设计中:程序=数据结构+算法面向对象的程序设计中:对象=数据结构+算法;程序=对象+对象+.+消息类是对象的抽象,对象是类的具体实例。2. 类和结构体声明异同形式上相似(把struct 换成class,C+中有结构体是为了兼容C语言)不同:类中若为声明是公有的和还是私有的,则默认是私有的,结构体相反,私有的只能被本类中的成员函数调用。3. 类外定义成员函数在类中做成员函数声明,类外定义成员函数,在类外定义时,需要注意:定义时,在函数类型和函数名之间需要加上类变量
2、和:。:是作用域限定符。4. Inline成员函数Inline的作用是在调用该函数时,将该函数的代码复制插入到函数调用点。而不是流程专区函数入口地址,执行完函数代码段后返回调用点。类外定义和类内声明的函数需要在前面加上inline。需要说明的是:只有但函数规模很小且调用频繁时,才将此采用函数定义为内置函数。5. 内成员函数的存储方式函数代码是存储在对象之外的,C+为此专门定义一个this指针,用来指向不同对象调用此成员函数。这样,每个对象占用的空间只是只是对象数据部分所占用的空间,不包括函数代码。6. 类声明和成员函数定义分离 将类的声明放在一个文件夹中(头文件*.h),用户想用该类直接包含头
3、文件即可。 成员函数的定义放在另一个文件中(*.cpp),这个文件需要编译生成目标代码。可以把编译后形成的目标文件保存起来,以后需要时把它调出来与程序的目标文件(main.obj)链接即可。成员函数定义不放在头文件中的好处就可以看出来,不用每次使用这个类时都对成员函数编译。 类声明头文件就称为用户使用类库的有效方法和公共接口。7. 面向对象几个名词“方法”:类的成员函数在面向对象理论中被称为“方法”,方法是对数据的操作。“信息”:外界通过发“信息”来激活有有关方法,此方法必须是公用的。如 class studentPublic :void display();*; Int mian() Stu
4、dent stu; Stu.display();/向对象“stu”发出一个“消息”(Stu.display())通知它执行其中的“方法”(display函数)8. 对象初始化类的数据成员不能在声明类时初始化的,如果一个类的成员全是公用的,则可以在定义对象时进行初始化,这样就和结构体相似。9. 构造函数用构造函数来处理对象的初始化。特点:一种特殊的成员函数,与其他成员函数不同,不需要用户来调用它,而是在建立对象时自动执行(而不是在申明类是对数据成员赋值)。构造函数的名字必须与类同名。可以在类内也可以在类外定义构造函数。 带参数的构造函数如 构造函数名(类型1 形参1,类型2 形参2) 用参数初始
5、化表对数据成员初始化如,Box:Box(int h,int w,int len):height(h),width(w),height(len) 构造函数的重载一个类中可以定义多个构造函数,这些够着参数具有相同的名字,参数的个数和类型不相同。10. 析构函数作用:不是删除对象,而是在撤销对象占用的内存之前完成一些清理工作。最主函数调用结束,在撤销对象之前的最后一项工作室调用析构函数。 构造函数与析构函数的顺序先构造的后析构,后构造的先析构。(特性相同的是这样,若特性不相同(作用域不同,)则结果也不一样。11. 对象数组Student stuN;/Student为已声明的类,N为常数对象数组初始化
6、如 student stu3=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_time13. 指向对象成员的指针 指向对象数据的指针(与定义普通变量指针相同)数据类型名 *指针变量名 指向对象成员函数的指针普通函数的指针变量定义形式:数据类型名(*指针变量名)(参
7、数列表)指针变量名=函数名指向公用成员函数的指针变量形式:数据类型名(类名:*指针变量名)(参数列表)指针变量名=&类名:成员函数名;如,#includeUsing name space std;Class TimePublic:Time(int,int,int);Int hour,minute,sec;Void get_time();Time:Time(int h,int m,int s)/构造函数hour=h;minute=m;sec=s;Void Time:get_time() /类外定义成员函数Couthour”:”minute”:”secendl;Int mian()Time t1(
8、10,13,56); /定义Time类对象t1Int *p1=&t1.hour; /定义指向整型数据的指针变量p1,使之指向t1.hourCout*p1get_time(); /调用p2所指向的对象的get_time()函数Void(Time:*p3)(); /定义指向Time类公用成员函数的指针变量p3P3=&Time:get_time(); / p3指向Time类公用成员函数get_time(t1.*p3)(); /调用对象t1中p3所指向的成员函数,即t1.get_time()14. this指针每一成员函数都包含一个特殊指针,之歌指针的名字是固定的,称为this。它的值是当前被调用的成
9、员函数所在的对象的起始地址。如调用成员函数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。 常对象常对象中的数据成员为长变量且必须要有初值。如Time const t1(12,34,56;则t1中的数据成员都不能被修改
10、。形式:类名 const 对象名(实参列表) 或者const 类名 对象名(实参列表)编译时,编译系统检查函数的声明,只要发现调用的常对象的成员函数,而该成员函数违背声明为const,就会报错。那么怎么调用?将成员函数声明为const。如 Void get_time() const; /注意const在后面 常对象成员常数据成员:只能通过构造函数的初始化表对常数据成员进行初始化。如,数据成员:const int hour;非法:Time:Time(int h)hour=h;合法:Time:Time(int h):hour(h)常成员函数:只能引用本类中的数据成员,而不能修改它们。 声明:voi
11、d get_time() const /注意const的位置在函数名和括号之后常对象只保证其所有数据成员的值不被修改;如果已定义了一个常对象,则只能调用其中const成员函数,而不能调用非const成员函数;常成员函数不能调用另一个非const成员函数。修改常对象中成员数据的值,可以将成员数据前加“mutable” 指向对象的常指针将指向对象的指针变量声明为const,并使之初始化,这样指针值始终保持为其初值,不能改变,即其指向始终不变。一般形式: 类名 *const指针变量名=对象地址注意:定义指针变量时使之初始化。Time* const ptr1=&t1;Ptr1=&t2 /不合法,ptr
12、1不能改变指向 指向常变量的指针变量如果一个变量已被声明为常变量,只能用指向常变量的指针变量指向它,而不是一般的指针变量。如,const char c=”boy”;Const char *p1;P1=c;Char *p2=c;/不合法,p2不是指向常变量的指针变量。指向常变量的指针变量还可以指向违背声明为const的变量,但此时不能通过指针变量修改该变量的值。如果函数的形参是执行非const型变量指针,实参只能是用指向非const变量的指针,而不能用指向const变量的指针。 指向常对象的指针变量同样,如果一个对象已被声明为常对象,只能用指向常对象的指针变量指向它,而不能用一般的指针变量指向它
13、。同样,定义了一个指向常对象的指针变量,并使它指向一个非const的对象,则其指向的对象是不能通过指针来改变的,但是指针变量本身的值是可以改变的。且指向常对象的指针变量只能引用常成员函数。如,Time t1(10,12,15),t2; /定义Time类对象t1和t2,是非const型对象。Const Time *p=&t1; /定义p为指向常对象的指针变量,并指向t1t1.hour=18; /合法,t1不是常变量(*p).hour=18; /非法,不能通过指针变量改变t1的值P=&t2; /p改为指向t2,合法 对象的动态建立和释放用到对象时才建立对象,在不需要时节撤销它,释放它占有的内存空间
14、以供别的数据使用,从而提高内存的利用率。如,对一个已经定义的Box类Box *pt; /定义一个指向Box类对象的指针变量ptpt= new Box; /在pt中存放了新建对象的起始地址* Coutheight; * Delete pt; /释放pt指向的内存空间 对象的赋值和复制对象的赋值形式:对象名1=对象名2;/两个必须是同类不同对象的数据成员占有不同的存储空间,赋值的过程是讲一个对象的数据成员在存储空间的状态赋值给里一个对象的数据成员的存储空间。对象复制的一般形式:类名 对象2(对象1);/用对象1复制出对象2或者:类名 对象2=对象1; 静态成员全局变量的值可以为各函数共享,但全局变量的安全性不能保证,任一个函数都可以改变全局变量的值。在同类的多个变量之间实现数据的共享,可以用静态的数据成员。一般形式:声明时:static 数据类型 数据成员静态数据成员初始化只能在类体外,形式:数据类型 类名:静态数据成员名=初值;静态数据成员不属于某一个对象,在为对象所分配的空间中不包括静态数据成员所占的空间。静态数据成员是在所有对象之外单独开辟空间。未对静态数据成员赋初值时默认为0,但不能用参数初始化表对静态数据成员初始化
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1