


下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第一章从C到C+1、利用常量C语言中利用define预定义符定义符号常量,C+州利用const关键字定义常量,其好处是定义的常量具有数据类型。2、内联函数对于一些函数体代码不大,但乂被频繁调用的函数,利用内联函数可以提高效率。但是内联函数的代价是需要占用更多的空间,如果程序在10个不同的地方调用了同一个内联函数,则程序将包含该函数的10个代码的拷贝。所以内联函数的实际是用空间来换时间一一剑开销增大了,时间开销减少了。在函数的定义处加上inline关键字说明函数为内联函数,但只是向编译器发出内联的请求,编译器在编译的时候未必会把该函数编译为内联函数。内联函数和带参数的宏的区别:内联函数是通过传递
2、参数实现的,而不是通过简单的文本替换来实现的。汪息:内联函数通常不能包括复杂结构的控制语句:如switch、while、复杂语句嵌套,否则,系统将作为普通函数处理。递归函数不能作为内联函数。(4) 内联函数适合只有15行的小函数在类结构中,在类体中定义的成员函数都是内联函数。3、函数重载带有默认参数的函数重载常引起二义性。如以下三个函数:intfun(intm,intn,intj=5)intfun(intm,intn=3,intj=5)intfun(intm=1,intn=3,intj=5)在调用fun(1,3,5)时,系统将产生二义性,因为都严格匹配上面的三个函数,所以编译器不知道要调用哪一
3、个。4、函数棋板函数棋板是通用的函数描述,它们使用通用类型来定义函数,其中的通用类型可以是具体的类型(如int或double)替换。通过将类型作为参数传递给棋板,可使编译器生成该类型的函数。template<typenameT>voidSwap(T&a,T&b)Ttmp;tmp=a;a=b;b=tmp;intmain()inta=10,b=20;floatx=3.14f,y=8.71f;cout<<"Beforeswap:"<<endl;cout<<a<<""<<b&
4、lt;<endl;cout<<x<<""<<y<<endl;Swap(a,b);Swap(x,y);cout<<"Afterswap:"<<endl;cout<<a<<""<<b<<endl;cout<<x<<""<<y<<endl;return0;其中AnyType一股为了简化,就定义为T。5、指针const和指针的组合情况指向常量的指针co
5、nstint*p或者intconst*p常指针int*constp指向常量的常指针constint*constp一定用配对的使用new和delete,否则会发生内存泄漏问题。在执行完delete之后,要把指针的值赋为NULL以避免产生野指针。6、引用引用就是为某个变量起了个别名,对别名的操作就等同于对目标变量的操作。引用本身不是变量,它是某个变量的别名,其本身不占用存储空间。定义引用的时候必须指出目标对象。7、名称空间名称空间的意义主要在于解决名字冲突问题。namespacenamespace_name_/各种名称(包括类型名、变量名和函数名)第二章类和对象1、类和对象的定义类是具有相同届性和
6、操作的一组对象的集合。类的实例就是对象。将一个对象赋值给另一个对象时,所有的数据成员都会逐个复制。2、友员在C+州,友员主要有两种类型:友员类和友员函数友员类一个类A如果是类B的友员类,则要在类B中要声明friendclassA。这样A就是成为了B的友员类,则类A中的所有成员函数都可以访问类B中保护或者私有成员。友员关系具备单向、不交换、不传递的特性。单方向:若A类为B类的友员类,并不意味着B也具有友员类A不传递:若A类是B类的友员类,B类是C类的友员类,并不意味着A可以直接存取C中的保护或私有变量。友员函数友员函数不是当前类的成员函数,是独立于当前类的外部函数,它可以访问当前类的私有数据成员
7、和公有数据成员。3、类的静态数据静态数据成员静态数据成员届于类,而不像普通数据成员一样届于某一个对象,因此要利用“类名::”访问静态的数据成员。静态数据成员不能在类中初始化,一般在main()函数之前初始化,如果不初始化,默认初始化为0。静态数据成员具有全局变量的一些特性,建议把静态数据成员说明为私有的。静态成员函数静态成员函数利用“类名:”作为它的限定词。由于静态成员函数不届于某个对象,因此一股用静态成员函数访问静态数据成员或者全局变量。一般而言,静态成员函数不访问类中的非静态数据成员。若确实有需要,静态成员函数只能通过对象名访问该对象的非静态成员。4、this指针this指针总是指向当前对
8、象。通过“this->成员名”或者“(*this).成员名”来表示当前对象中的某个成员。5、构造函数构造函数的特性:(1) 构造函数的名字必须和类名一致(2) 构造函数可以带参数,但是不能有返回值(3) 定义对象时,编译系统自动调用构造函数(4) 构造函数不能像其它成员函数那样被显示地调用,它是在定义对象的同时被调用。(5) 构造函数可以有多个,如果没有定义构造函数,系统会提供一个默认的构造函数,(6) 它只负责创建对象,不做任何的初始化操作。拷贝构造函数:通过已存在的对象创建一个新对象。类名(const类名&ob)(/拷贝构造函数体如果没有编写自定义的拷贝构造函数,C+松自动将
9、一个已存在的对象复制给新对象,这种按成员逐一复制的过程由默认的拷贝构造函数自动完成。拷贝构造函数和缺省的拷贝构造函数区别在于:拷贝构造函数用自定义的拷贝构造函数所给出的算法初始化新对象的数据成员,也就是说已知对象和新对象有区别。而采用缺省的拷贝构造函数初始化对象,则新对象和已知对象一致。在C+玳序中,如果使用默认构造函数创建两个对象,则这两个对象指向同一个资源,这中拷贝称之为浅拷贝,若使用自定义的拷贝构造函数创建两个对象,则这两个对象指向不同的资源,这种拷贝称为深拷贝。以下是一个深拷贝的一个例子:#include<iostream>usingnamespacestd;classst
10、udent(public:student(char*sn)(cout<<"constructing"<<sn<<endl;sname=newchar(strlen(sn)+1);if(sname!=NULL)strcpy(sname,sn);student(student&s)(cout<<"copy"<<endl;sname=newchar(strlen(s.sname)+1);if(sname!=NULL)strcpy(sname,s.sname);student()cout<
11、<"destructing"<<sname<<endl;deletesname;sname=NULL;protected:char*sname;intmain()(studentp1("wang");studentp2(p1);return0;在VC下编译能通过,但是在运行时出错了。但是在linux环境下,g+编译和运行都正确。我估计在VC下都当成浅拷贝了。6、析构函数一个类只能有一个析构函数,没有参数,没有返回值,用户可以自己定义析构函数,也可以使用编译系统生成的默认析构函数。析构调用过程是构造顺序的逆过程。最先构造的对象
12、,最后析构。由于析构函数不能带参数,故一个类中只能有一个析构函数。一般来说,如果一个类中定义了虚函数,析构函数也应定义为虚析构函数,其主要用来完成对象消亡之前做一些活理工作,比如释放内存等。一般情况下类的析构函数作用是:释放内存资源,而此析构函数不能被调用的话会造成内存泄漏。此时将析构函数定义为虚函数就特别重要。7、成员初始化歹0表及初始化在进行含有对象成员的类对象的初始化时间,首先按照类定义对象成员的顺序来分别调用各自的对象成员所对用的构造函数,然后再执行该类自己定义的构造函数。8、继承子类继承父类之后,如果修改了父类的方法,在调用父类的方法的时候,要使用(子类的对象).父类名:(方法名)来
13、调用。#include<iostream>usingnamespacestd;classBase(public:voidfun()(cout<<"InBase"<<endl;classPai:publicBase(public:voidfun()(cout<<"InPai"<<endl;intmain()(Paia;a.Base:fun();a.fun();return0;第三章多态1、虚函数C+找持两种类型的多态性,一种是编译时多态,一种是运行时多态。(1) 编译时的多态性:也称静态多态,是通
14、过函数的重载来实现的,到底执行哪一个重载版本在编译时就知道了。(2) 运行时的多态性:也称动态多态,是直到系统运行时,才根据实际情况决定实现何种操作。C+州,运行时的多态性通过虚函数机制来实现。编译时的多态性具有运行速度快的特点,而运行时的多态性则带来了高度灵活和抽象的特点,也就是说,到底运行哪个函数版本,需要在运行时通过找出发送消息的对象来确定,编译器在编译时采用的是动态联编的手段。动态联编的一个例子:#include<iostream>usingnamespacestd;classShape(public:virtualvoidArea()(cout<<"
15、这是基类形状类的求面积函数"<<endl;classRectangle:publicShape(public:voidArea()(cout<<这是派生类矩形的求面积函数"<<endl;intmain()(Shapesh1,*pShape;Rectanglerecti;pShape=&sh1;/指针pShape指向Shape对象shlpShape->Area();pShape=&rect1;/指针pShape指向Rectangle对象rectipShape->Area();return0;2、纯虚函数纯虚函数的
16、一般格式为:(1) Virtual返回类型函数名(参数表)=0定义纯虚函数时,没有实现部分,不能产生对象,不能被直接调用“=0”本质上是将指向函数体的指针定义为NULL纯虚函数仅起提供一个与派生类相一致的接口作用,用于派生类中具有相同名字的函数的存放处。(2) 在派生类中必须有重新定义的纯虚函数的函数体,即使再次声明该函数为纯虚函数。3、抽象类如果一个类中,至少有一个纯虚函数,那么称该类为抽象类。抽象类不能实例化,它只是将许多相关的类组织起来,提供一个公共的基类,而那些被它组织在一起的具体的类由它派生出来。#include<iostream>usingnamespacestd;cl
17、assCMenu/抽象类(public:virtualvoidfunc()=0;/纯虚函数;classCFormMenu1:publicCMenu(public:voidfunc()(cout<<"你选择的是新建文件卸"<<endl;classCFormMenu2:publicCMenu(public:voidfunc()(cout<<"你选择的是打开文件卸"<<endl;;classCFormMenu3:publicCMenu(public:voidfunc()你选择的是一一保存文件卸"<
18、<endl;(cout<<"intmain()(/定义一个基类的指针数组intchoice;CMenu*f3;f0=newCFormMenu1;f1=newCFormMenu2;f2=newCFormMenu3;do新建文件."<<endl;打开文件."<<endl;保存文件."<<endl;退出程序."<<endl;(cout<<"1:cout<<"2:cout<<"3:cout<<”0:cin>
19、;>choice;if(choice>=1&&choice<=3)fchoice-1->func();while(choice!=0);return0;第四章类棋板和重载1、类棋板类棋板只是棋板的定义,不是一个实在的类,类棋板是对象的抽象,代表一种类型的类,这些类具有相同的功能,但是数据成员类型及成员函数返回类型和形参类型不同。实例化类棋板是将一个通用的类棋板生成一个具体的类,因此说,棋板类是类棋板的实例,代表一个具体的类。棋板类可以定义类对象,而类棋板不能定义对象,因此说棋板类才是实实在在的类。#include<iostream>using
20、namespacestd;template<typenameT>classCDemo(public:CDemo(Tt1,Tt2,Tt3);TMin();TMax();private:Tx,y,z;;template<typenameT>/在类外定义的成员函数,需要加上这条,来指明它是类棋板的成员CDemo<T>:CDemo(Tt1,Tt2,Tt3):x(t1),y(t2),z(t3)(return;template<typenameT>TCDemo<T>:Min()(Tmin=x;if(y<min)min=y;if(z<m
21、in)min=z;returnmin;template<typenameT>TCDemo<T>:Max()(Tmax=x;if(y>max)max=y;if(z>max)max=z;returnmax;intmain()(CDemo<int>example(1,2,3);cout<<example.Max()<<endl;cout<<example.Min()<<endl;return0;2、运算符重载C+中大部分的运算符可以重载,但是如下表所示的运算符不能重载。运算符运算符名称禁止重载的理由?:三目条件运算符C+中没有定义三目运算符的语法.成员操作符为保证成员操作符对成员访问的安全性:作用域操作符该操作符右操作数不是表达式sizeof类型长度操作符该操作符的操作数为类型名,不是表达式运算符的重载形式有两种:重载为类的成员函数和重载为类的友员函数。这两种形式都可以访问类的私有成员。成员函数是用this指针隐式地访问类对象的某个参数,友员函数的调用必须明确列出该参数。当运算符函数是一个成员函数时,最左边的操作数(或者只有最左边
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025广东龙川县财政投资评审中心招聘编外人员1人模拟试卷及完整答案详解1套
- 2025年福州市鼓楼区文体旅局招聘街(镇)专职文化人员2人考前自测高频考点模拟试题及参考答案详解1套
- 2025国家电投重庆公司招聘4人笔试题库历年考点版附带答案详解
- 2025春季广东中水珠江规划勘测设计有限公司招聘模拟试卷及答案详解(各地真题)
- 2025中智集团中智国际商务发展有限公司副总经理招聘笔试题库历年考点版附带答案详解
- 美国枪支安全培训课件
- 2025年携手创办托儿所合作投资协议
- 2025私人借款偿还协议书范本
- 2025-2026学年辽宁省沈阳市皇姑区虹桥中学九年级(上)开学历史试卷(含答案)
- 甘蔗行业甘蔗种植技术研究
- 国企新员工入职纪检培训
- 边境守护者边境管控信息化平台建设方案分析
- 统编版(2024)八年级上册道德与法治5.2《诚实守信》教案
- 质量经理工作汇报
- 学堂在线 走进心理学 章节测试答案
- 学堂在线 极区航海导航保障 期末考试答案
- 化工安全技术课件下载
- 初中诚实守信说课课件
- 小儿急性胰腺炎护理常规
- 英语词性介绍课件
- 现代大学英语(第三版)语音教程 课件 第四章 读音规则与朗读技巧
评论
0/150
提交评论