版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
面向对象有关概念:类:具有相似属性和行为的对象集合,把数据和操作封装在一起对象:数据+操作。面向对象特性:抽象,封装,继承,多态2、输入输出:输入cin>>a>>b;输入不能有endl。输出cout<<a<<b<<endl;3、const修饰符:指向常量的指针:如constchar*p=”abcd”;不容许变化指针所指的常量,如p[3]=’x’是错误的,不过可以变化指针p的值p=“mn”;是对的。常指针:char*constp=“abcd”;指针自身是常量,不能移动,不过所指内容为变量,可以更改,如p[3]=’x’是对的。常数据组员,常组员函数,常对象:在类中申明的数据或函数可以是常量,对于常数据组员要用初始化列表初始值,在C++类中,const关键字可以修饰对象和组员函数,const对象不能被修改,一种常对象只能调用它的常组员函数,不能调用一般组员函数。常组员函数格式:类型阐明符函数名(参数表)const;常组员函数可以参与重载。常组员函数不能更新对象的数据组员,也不能调用该类中的一般组员函数,const组员函数不能修改数据组员。4、内联函数:在函数阐明前冠以关键字inline,目的是消除函数调用时的系统开销,提高运行速度。注意:内联函数体内不能有循环语句和switch语句。内联函数的申明必须出目前内联函数第一次被调用之前。类构造中所有在类阐明体内定义的函数都是内联函数。5、带有缺省参数值的函数:在阐明函数原型时,可以给一种或多种形参指定缺省值,调用时如给出实参,则采用实参值,否则采用预先给出的默认形参值。如某一种类point的构造函数原型为point(intx=1,inty=0);则参数x和y的缺省值为1和0.注意:在函数原型中,所有缺省值的参数都必须从右往左缺省,在函数调用时从左往右将实参与形参结合,如point(intx=1,inty=0){X=x;Y=y;},那么执行pointp(3)之后p的X和Y值分别为3,0.6、函数重载:C++容许功能相近的函数在相似的作用域内以相似函数名申明,从而形成重载。注意:重载函数的形参必须不一样:个数不一样或类型不一样。编译程序将根据实参和形参的类型及个数的最佳匹配来选择调用哪一种函数。例:voidadd(intm,intn){cout<<”twointegernumbersm+n=”<<m+n<<endl;}voidadd(floatx,floaty){cout<<”twofloatnumbersm+n=”<<m+n<<endl;}inti=1,j=2;floatf=1.0,d=2.0;add(i,j);add(f,d);则前者调用第一种函数,后者调用第二个函数输出twointegernumbersm+n=3twofloatnumbersm+n=3.07、引用:引用(&)是标识符的别名,例如:inti;int&ri=i;//建立一种int型的引用ri,并将其初始化为变量i的一种别名。注意:申明一种引用时,必须同步对它进行初始化,使它指向一种已存在的对象,不能申明完毕后再赋值,如inti;int&ri;//错误ri=i;一旦一种引用被初始化后,就不能改为指向其他对象。如:inti,j;int&ri=i;ri=&j;//错误引用可以作为形参作为传地址调用,效果和指针同样。voidswap(int&a,int&b){...}引用与地址符的区别:引用运算符仅在申明是带有引用运算符&,后来就像使用一般变量同样,其他场所使用&都是地址操作符8、作用域标识符(::)假如但愿在局部变量的作用域内使用同名的全局变量,在该变量前加上::,如::a代表全局变量。9、new和delete运算符new用来内存分派,最基本格式为:指针变量=new类型名;该语句在程序运行时从自由存储区中为程序分派一类型名字节大小空间,该空间首地址被存于指针变量中。运算符delete用于释放new分派的存储空间,基本格式:delete指针名;阐明:可以用new将分派的对象初始化,new和delete都可以重载。new分派的空间使用结束后应当也只能用delete显式释放,否则将不能回收而变成死空间使用new为数组动态分派内存:指针变量=new类型名[下标值];如int*p=newint[10];释放时:delete[]指针变量名;如delete[]p;new可认为简朴变量分派内存时同步进行初始化,指针变量=new类型名(初始化列表);如int*p=newint(10);10、类是一种顾客自定义类型,申明形式:class类名称{public:公有组员(外部接口)private:私有组员protected:保护型组员};类组员中缺省访问方式为私有公有类型组员:在关键字public背面申明,它们是类与外部的接口,任何外部函数都可以访问公有类型数据和函数。私有类型组员:在关键字private背面申明,只容许本类中的函数访问,而类外部的任何函数都不能访问。假如紧跟在类名称的背面申明私有组员,则关键字private可以省略。保护类型:在类的定义中,阐明为protected的数据组员称为保护组员。保护数据组员具有双重作用:对于其派生类而言,是公有的,而对于其外部的程序而言,是私有的类的组员:组员数据与一般的变量申明相似,但需要将它放在类的申明体中。组员函数在类中阐明原形,可以在类外给出函数体实现,并在函数名前使用类名加以限定。也可以直接在类中给出函数体,形成内联组员函数。类的对象是该类的某一特定实体,即类类型的变量。申明形式:类名对象名;例:ClockmyClock;类中组员的访问方式:类中组员互访:直接使用组员名类外访问:使用“对象名.组员名”或“对象指针名->组员名“方式访问public属性的组员11、构造函数构造函数的作用是在对象被创立时使用特定的值构造对象,或者说将对象初始化为一种特定的状态。特点:在对象创立时或new类名时由系统自动调用。假如程序中未申明,则系统自动产生出一种默认形式的构造函数,只有程序中定义有构造函数,系统不再自动生成缺省的构造函数缺省构造函数类名::缺省构造函数名(){}函数名必须与类名相似不能指定函数返回类型参数可以有,也可以无,参数可以带默认形参值,因此一种类可以有多种构造函数,从而构造函数可以重载。如有一种类A,当执行语句Aa;时将自动调用该类的无参构造函数或缺省的构造函数或带默认形参值的构造函数,但无参构造函数和带默认形参值的构造函数两者同步出现轻易出现调用时引起二义性容许是内联函数运用构造函数创立对象有两种措施:用构造函数之间创立对象:类名对象名(实参表);如pointp(1,2);运用构造函数创立对象时,通过指针和new来实现:类名*指针变量=new类名(实参表);如A*p=newA(1,2);注意类A申明对象指针并不调用构造函数,而是通过new创立临时对象调用构造函数,因此该语句只调用构造函数1次12、拷贝构造函数拷贝构造函数是一种特殊的构造函数,其形参为本类的对象引用,作用是用已经存在的对象初始化另一种同类的新对象。类名(类名&对象名);//拷贝构造函数如类A拷贝构造函数为:A(A&x);拷贝构造函数特点:也是构造函数,因此其函数名与类名相似,没有返回值只有一种参数,并且是本类的对象引用,因此一种类只能有一种,不能重载每一种类均有一种拷贝构造函数,假如没有定义,系统会自动生成一种缺省的调用拷贝构造函数3种状况:当用类的一种对象去初始化该类的另一种对象时系统自动调用拷贝构造函数实现拷贝赋值。若函数的形参为类对象,调用函数时,实参赋值给形参,系统自动调用拷贝构造函数。当函数的返回值是类对象时,系统自动调用拷贝构造函数。深拷贝和浅拷贝:缺省的拷贝构造函数所实现的数据组员逐一赋值就是浅拷贝,当类中有指针时,需要自定义拷贝构造函数,谓深拷贝。13、析构函数完毕对象被删除前的某些清理工作。特点:析构函数与构造函数名相似,但它前面必须加一种波浪号~析构函数没有返回值析构函数没有参数,因此一种类中只能有一种析构函数,因此析构函数不能重载当撤销对象时,或delete对象指针编译系统自动调用析构函数假如没有定义析构函数,系统自动生成一种缺省的析构函数类名::~缺省析构函数名(){}14、组员初始化列表在申明类时,不能在数据组员的申明中对数据组员进行初始化,一般在构造函数中用赋值语句进行,但对于内嵌的对象、常量、引用数据组员需要在构造函数的组员初始化列表中进行。带有组员初始化列表的构造函数一般格式:类名::构造函数名(参数表):(组员初始化列表){。。。。}15、this指针隐含于每一种类的组员函数中的特殊指针。16、对象数组:类名数组名[下标值];该数组中每个元素都是对象,都会自动调用构造函数,当数组中每一种对象被删除时,系统都要调用一次析构函数。访问措施:数组名[下标].组员名17、对象指针:类名*对象指针名;定义对象指针不会调用构造函数运用对象指针可以访问单个对象组员,如point*p,ob;p=&ob;p->show();或(*p).show();也可以用对象指针访问对象数组,对象可以作为函数参数,对象指针也可以18、指向类组员的指针:通过指向组员的指针只能访问公有组员指向类的非静态组员的指针指向公有数据组员的指针:类型阐明符类名::*数据组员指针名;阐明指针应当指向哪个组员:指针名=&类名::数据组员名;通过对象名(或对象指针)与组员指针结合来访问数据组员:对象名.*类组员指针名或:对象指针名->*类组员指针名申明指向公有函数组员的指针:类型阐明符(类名::*指针名)(参数表);初始化:指针名=类名::函数组员名;通过对象名(或对象指针)与组员指针结合来访问函数组员:(对象名.*类组员指针名)(参数表)或:(对象指针名->*类组员指针名)(参数表)指向类的静态组员的指针对类的静态组员的访问不依赖于对象,可以用一般的指针来指向和访问静态组员19、静态组员静态数据组员用关键字static申明,该类的所有对象维护该组员的同一种拷贝,必须在类外定义和初始化,用(::)来指明所属的类。初始化格式:数据类型类名::静态数据组员名=值;静态数据属于整个类,因此既可以通过某个对象,或对象指针去访问,也可以使用类名::静态数据组员名格式去访问它。静态组员函数一般来说,静态组员函数只能引用属于该类的静态数据组员或静态组员函数。静态组员函数没有this指针类外代码可以使用类名和作用域操作符来调用静态组员函数。如类名::静态组员函数名(实参表)或者对象。静态组员函数名(实参表)或对象指针-〉静态组员函数名(实参表)如某类A:classA{private:staticinttotalW;intw;public:A(intm){
w=m;
totalW+=m;}~A(){totalW-=w;}staticintgetT(){returntotalW;}};intA::totalW=0;voidmain(){Aal(50);cout<<A::getT()<<endl;Aa2(100);cout<<a2.getT()<<endl;}20、友元友元是C++提供的一种破坏数据封装和数据隐藏的机制。提高程序运行效率友元函数不是目前类的组员函数,而是对立于目前类的外部函数,它可以访问该类的所有组员,包括公有,私有,受保护。友元函数不是类的组员,因此没有this指针,它不能直接引用对象组员的名字,它必须通过入口参数传递进来的对象名或对象指针来引用该对象的组员。如某类girl的友元函数disp格式:voiddisp(girl&g);友元组员一种类的组员函数作为另一种类的友元,它既可以访问本类的所有组员,还可以访问friend申明所在类的所有组员友元类若一种类为另一种类的友元,则此类的所有组员都能访问对方类的私有组员。友元关系是单向的,不具有互换性和传递性21、派生类继承的目的:实现代码重用。派生的目的:当新的问题出现,原有程序无法处理(或不能完全处理)时,需要对原有程序进行改造。派生类的申明class派生类名:继承方式基类名{组员申明;};继承方式:三种继承方式(省略默认为私有继承),公有继承,私有继承,保护继承不一样继承方式的影响重要体目前:内部访问:派生类组员对基类组员的访问权限对象访问:通过派生类对象对基类组员的访问权限在派生类中可以直接访问的是基类的公有组员和保护组员公有继承(public)基类的public和protected组员的访问属性在派生类中保持不变,但基类的private组员不可直接访问。派生类中的组员函数可以直接访问基类中的public和protected组员,但不能直接访问基类的private组员。通过派生类的对象只能访问基类的public组员。私有继承(private)基类的public和protected组员都以private身份出目前派生类中,但基类的private组员不可直接访问。派生类中的组员函数可以直接访问基类中的public和protected组员,但不能直接访问基类的private组员。通过派生类的对象不能直接访问基类中的任何组员。保护继承(protected)基类的public和protected组员都以protected身份出目前派生类中,但基类的private组员不可直接访问。派生类中的组员函数可以直接访问基类中的public和protected组员,但不能直接访问基类的private组员。通过派生类的对象不能直接访问基类中的任何组员22、类型兼容规则一种公有派生类的对象在使用上可以被当作基类的对象,反之则严禁。详细表目前:派生类的对象可以被赋值给基类对象。派生类的对象可以初始化基类的引用。指向基类的指针也可以指向派生类。通过基类对象名、指针只能使用从基类继承的组员23、多继承时派生类的申明class派生类名:继承方式1基类名1,继承方式2基类名2,...{组员申明;}注意:每一种“继承方式”,只用于限制对紧随其后之基类的继承。24、继承时的构造函数基类的构造函数不被继承,派生类中需要申明自己的构造函数。申明构造函数时,只需要对本类中新增组员进行初始化,对继承来的基类组员的初始化,自动调用基类构造函数完毕。派生类的构造函数需要给基类的构造函数传递参数,要看详细状况在类继承过程中,当基类只有带默认值的有参构造函数时,派生类的构造函数也许为:默认构造函数,不带参数构造函数,带参数构造函数;当基类只有不带默认值的有参构造函数时,派生类必须有构造函数单一继承时的构造函数派生类名::派生类名(基类所需的形参,本类组员所需的形参):基类名(参数表){本类组员初始化赋值语句;};多继承且有内嵌对象时的构造函数派生类名::派生类名(基类1形参,基类2形参,...基类n形参,本类形参):基类名1(参数),基类名2(参数),...基类名n(参数),内嵌对象数据组员的初始化{本类组员初始化赋值语句;};构造函数的调用次序1.调用基类构造函数,调用次序按照它们被继承时申明的次序(从左向右)。2.调用内嵌组员对象的构造函数,调用次序按照它们在类中申明的次序。3.派生类的构造函数体中的内容。25、继承时的析构函数析构函数也不被继承,派生类自行申明申明措施与一般(无继承关系时)类的析构函数相似。不需要显式地调用基类的析构函数,系统会自动隐式调用。析构函数的调用次序与构造函数相反。26、虚基类用于有共同基类的场所以virtual修饰阐明基类例:classB1:virtualpublicB27、多态多态的分类:参数多态,包括多态,重载多态和强制多态多态的实现:函数模板和类模板,虚函数,函数重载、运算符重载虚函数虚函数是动态绑定的基础,实现多态的重要手段。定义在基类中进行,在类的申明中,在函数原型之前写virtual。virtual只用来阐明类申明中的原型,不能用在函数实现时。具有继承性,基类中申明了虚函数,派生类中无论与否阐明,同原型函数都自动为虚函数。在派生类中重新定义时,其函数原型都必须和基类中的原型完全相似。调用方式:通过基类指针或引用,执行时会根据指针指向的对象的类,决定调用哪个函数。不能是友元函数,不能是静态组员函数;不能是内联函数;不能是构造函数;可以是析构函数。规定会分析具有虚函数的程序运行成果纯虚函数是在基类中阐明的虚函数,它在该基类中没有定义,但规定在它的派生类中必须定义自己的版本,或重新阐明为纯虚函数:virtual函数类型函数名(参数表)=0;申明为纯虚函数后在基类中就不再给出函数实现部分,函数体有派生类给出。带有纯虚函数的类称为抽象类
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2022年中考物理一轮复习学案 专题六 质量与密度
- 太阳能安装与物资采购合同
- 中南林业科技大学《工程地质》2022-2023学年第一学期期末试卷
- 2021-2022学年八年级(下)物理竞赛题模拟卷 (六)
- 机械CAD、CAM-形考任务三-国开-参考资料
- 加盟店员工培训
- 中南大学《冶金环境工程学》2021-2022学年第一学期期末试卷
- 中南大学《热力系统仿真与优化》2023-2024学年第一学期期末试卷
- 中南大学《媒介经营与管理》2023-2024学年期末试卷
- 中南大学《化合物表征方法与技术》2023-2024学年第一学期期末试卷
- YC/T 336-2020烟叶收购站设计规范
- GB/T 5095.7-1997电子设备用机电元件基本试验规程及测量方法第7部分:机械操作试验和密封性试验
- GB/T 4354-2008优质碳素钢热轧盘条
- GB/T 37439-2019高速铁路预制后张法预应力混凝土简支梁
- GB/T 18723-2002印刷技术用黏性仪测定浆状油墨和连接料的黏性
- 药品供应目录(人民医院药品名分类汇总表)
- CAK6136V车床面板操作
- 矿井提升机技术参数介绍及设备选型过程
- 《经济学基础》试题库(附答案)
- 学前教育论文范文8000字(通用九篇)
- 初中议论文写作讲解完整版课件
评论
0/150
提交评论