c++知识点.docx
- 文档编号:3282629
- 上传时间:2022-11-21
- 格式:DOCX
- 页数:19
- 大小:28.17KB
c++知识点.docx
《c++知识点.docx》由会员分享,可在线阅读,更多相关《c++知识点.docx(19页珍藏版)》请在冰豆网上搜索。
c++知识点
C++程序设计第一章主要内容
1.1c++的基础知识
1、c++兼容c。
所以c++语言(面向对象编程)中也有c语言面向过程编程的特点。
2、c++的扩展名为.cpp
3、c++注释一行:
//。
注释多行:
开始处/*末尾处*/
4、键盘输入:
cin
cin又称为:
输入操作符,提取操作符ex:
cin>>x;
注意:
cin后只能接变量,不能跟常量。
ex:
cin>>3;错误
5、屏幕输出:
cout
cout又称为:
输出操作符,插入操作符ex:
cout< "<<12< cout后面可以接常量,变量,表达式 6、回车换行: endl或者"\n"ex: cout< 7、使用命名空间usingnamespacestd; 8、c++一般程序都需要包含两条头文件: include usingnamespacestd;两行可用一行语句: include 9、voidmain(){}与intmain(){return0;}等效 10、const修饰符定义常量 c语言中: 使用宏定义#define定义常量ex: #definePI3.1415926简单的文本替换 c++中: 注意使用const时必须同时初始化(作参数时除外,extern除外) ex: constdoublePI=3.1415926; constinti;错误externconstinti;正确 11、程序的书写格式与c语言一样,可以把几条语句写到一行上,也可以增加任意个空格。 1.2.1函数重载 定义: c++允许为同一个函数定义多个版本,一个函数名具有多种功能,这称为函数重载。 如何构成函数重载: 函数的参数不同,即参数个数、参数类型至少有一个不同即可。 与函数类型(返回值类型)无关。 ex: intmax(int,int);floatmax(int,int)不构成函数重载,因为参数相同,虽然返回值类型不同 1.2.2c++的基本数据类型 1、基本数据类型: 整型: int 浮点型: float(单精度)double(双精度) 字符型: char 布尔型(逻辑型): bool(c++新增)逻辑判断 2、c++的构造数据类型: 枚举型: enum 类: class(c++特有的) 结构体: struct 共用体: union 数组: C++的整数常量有4种: 十进制常量、长整型常量(后缀L或l表示)、八进制常量(前缀0表示)、十六进制常量(前缀0x表示) C++的浮点型常量有3种;double型、float型(后缀F或f)、长浮点型(后缀L或l表示) 1.2.3动态分配内存 1、定义: 不采用指针赋地址的方式分配地址,使用new/delete方式分配空间 2、优点: 可以自由的申请,动态的释放空间。 提高效率。 二者成对出现 3、申请方式举例: new (1)int*p=newint;申请1个整型变量的空间,用指针p指向该位置 (2)int*p=newint[3];申请3个整型变量的空间,用指针p指向该位置 (3)int*p=newint(55);请1个整型变量的空间,并赋初值55,用指针p指向该位置 4、释放方式举例: delete deletep;释放一个空间 delete[]p;释放多个空间 1.2.4引用 1、定义: 使用&给变量起了一个别名。 2、声明方式举例: 与&位置无关。 ex: int&a1=a;int&a1=a;int&a1=a;int&a1=a;以上写法都可以 对于*和&修饰符,为避免误解,最好将修饰符紧靠变量名,通常采用第一种int&a1=a;int*p; 3、注意: 引用在定义时必须初始化。 int&a;错误 不能声明对引用的引用。 int&&r=x;错误 不能直接声明对数组的引用。 只能通过typedef来实现p12 4、优点: 不另外分配空间,提高效率。 谁赋值给它,就使用谁的空间 5、适用于: 作为函数参数,返回值。 1.2.5对指针使用const修饰 const修饰谁,1、谁的值不能变,即不能作左值2、而且必须同时初始化(作为参数时除外) 1、左值、右值 定义: 放在等于号左边叫左值,右边的叫右值。 ex: x=3;//x是左值,3是右值 注意: 左值不能是常量,只能是变量。 4=3;错误 2、指向常量的指针(移动洗手间) constint*p=&x;指向的值(*p)不变*p=3;错误p=&y对了(只能是这一个人在上厕所) 3、常量指针 int*constp=&x;指向(地址p)不能变p=&y;错误*p=3;对了(厕所位置不能移动) 4、指向常量的常量指针 constint*constp=&x;很少用到指向的值和地址都不能变.(只能是这一个人在一个地方上厕所)意义不大 5、例如constchar*p;错误指向常量的指针必须同时初始化 constinta;错误const修饰的变量必须同时初始化 1.2.6泛型算法 1、定义: 提供的操作与元素的类型无关。 2、包含头文件: #include 输出数组的内容,升序,反转,复制 #include 降序,检索(查找) 3、: 记住那六个函数P14ex: inta[len];reverse(a,a+len);a表示首地址,a+len表示尾地址 1.2.7数据的简单输入输出格式 1、使用操控符的特殊函数 (1)需头文件 dec: 转换十进制 oct: 转换八进制 hex: 转换十六进制 endl: 回车换行 (2)需头文件 setfill(charch): 填充字符 setprecision(intn): 设置精度 setw(intwidth): 只对紧接着的那个元素有效。 而其他的操控符对其后的所有元素有效。 2、使用iso_base类提供的接口P197划的 1.3C++程序执行过程分为: (4部分) 考点: 编辑(写程序)、编译(判断是否有错)、连接(几个程序合并起来)、运行(! ) 第二章主要介绍类和对象的用法 一、C++面向对象程序设计特点: 抽象(指类和对象)、封装(指private)、继承(在类的基础上加新的成员)、多态性(函数重载和虚函数) 二、string类和complex类的使用 string类的典型成员函数举例 1、s.size()返回字符串的长度 2、s.substr(14,3)位置下标从0开始的,从第几个位置取几个字符 3、s.find("hello",0)查找字符串,返回字符串的位置。 查不到,返回-1。 从第0个位置查找,可以不写 实例: #include usingnamespacestd; #include voidmain() {strings="hello,everyone! ";//定义一个对象如何定义: 类名变量 cout< 对象名.成员函数 cout< cout< //3、查找字符串,返回字符串的位置。 查不到,返回-1。 从第0个位置查找,可以不写 strings2; getline(cin,s2);//4、从键盘输入一行字符给对象s2 cout< cout< 附: 对象的等于号与()等效,都是赋值 二、complex类 1、作用: 定义复数ex: 2.5+3.5 2、包含头文件: #include 3、定义对象: complex 4、典型函数: num.real()求实部num.imag()求虚部 三、联系怪兽类掌握类和对象实质。 第三章函数和函数模板 3.1函数的传递方式分为: 传值和传引用,其中传值分为变量值和传变量地址值。 传引用又成为传地址。 3.1.1对象作为函数参数 传递后,参数的变化: 实参不变,形参变 ex: 函数调用: swap(str1,str2);实参函数声明: swap(strings1,strings2){}形参 3.1.2对象指针作为函数参数(同数组) 1、传递后,参数的变化: 实参变,形参变 ex: 函数调用: swap(&str1,&str2);实参函数声明: swap(string*s1,string*s2){}形参 2、对象数组作为函数参数 传递后,参数的变化: 实参变,形参变 ex: 函数调用: swap(a);实参函数声明: swap(inta[]){}形参 3.1.3对象引用作为函数参数 1、传递后,参数的变化: 实参变,形参变 ex: 函数调用: swap(str1,str2);实参函数声明: swap(string&s1,string&s2){}形参 以上可参照课本例题,很好 3.1.4默认参数 定义: 给形参赋默认值(必须在参数序列的后部)ex: intadd(inta,intb=0,intc=9); 如何调用: 实参从左往右依次赋值,实参个数不够的,使用默认参数 3.1.5使用const保护数据 作用: 在参数传递时,不改变实参和形参的值(形参初始化后) 实例: intvoc(constint&a){return++a;}错误的,const修饰了a,a的值初始化后就不允许再改变 3.2函数返回值 3.2.1返回引用的函数 声明方式举例: int&voc(constint&a){returna;} 优点: 1、一般函数在内存中要产生返回值的副本,引用作为返回值不占空间 2、一般函数不能放在等于号的左边,但是它可以做左值ex: index(3)=16; 3.2.2返回指针的函数 声明方式举例: int*voc(constint&a)注意: 返回的是地址,指针和数组名都是地址 3.2.3返回对象的函数 声明方式举例: stringvoc(constint&a)string是类名 注意: 返回值类型是类名,类名就是一种数据类型 3.3内联函数 一、定义: 在函数返回值前加inline的函数称为内联函数。 二、声明方式举例: inlineintmax(inta,intb){函数体} voidmain(){cin>>x>>y;if(调用表达式)...} 三、特点: 增加代码量(缺点),提高运行效率(优点)。 四、补充: 函数调用时要开辟空间存放调用语句的位置,以便返回来。 (类似医院就诊) 使用inline后,直接将函数体替换调用表达式,从而提高效率。 (相当于候诊室的病人直接进入了就诊室,省去护士传叫) 注意: inline关键字必须与定义体放在一起,而不是单单放在声明中。 五、适用范围: 1-5行的小程序。 不能用于循环语句、switch。 (如果病人有1000在候诊室,一旦都进入了就诊室,程序效率反而会降低) 3.4函数重载和默认函数(同时出现) 一、注意: 使用默认参数时,再编写重名函数时,参数类型相同时,参数个数必须大于默认参数。 否则产生二义性 二、举例: #include intadd(intm1=0,intm2=0,intm3=0,intm4=0)//默认参数列表总数为4个 {returnm1+m2+m3+m4;} intadd(intm1,intm2,intm3,intm4,intm5) {returnm1+m2+m3+m4+m5;}//重载函数的参数个数需大于4个 voidmain() {cout< 3.5函数模板 一、引入原因: 为了解决函数名相同,但是参数类型不同,要重复定义函数的不便,我们采用了函数模板 ex: intmax(int,int);floatmax(float,float); 上面的两个函数名相同,都是求最大值,但是参数不同,却要定义两次 加上该句template tmax(ta,tb){returna>b? a: b;}此时的t成为了一种万能类型 具体用法: 一、声明方式: template 参数类型相同时可用下面的替换 template 其中class可换成typename,T可换成任意变量,通常使用t,Type,type 二、注意: 1、t是一种数据类型,不是变量。 2、用到一次函数模板就要声明一次template 三、如何调用: 根据实参的类型,t转换成相应的类型 调用方式: 隐式调用: 通常采用采用的方式ex: max(3,4);max(3.4,4.5); 显示调用: ex: max 第四章类的基础知识 1、引入: 数组可以把相同类型的变量放到一起ex: inta[100];而类可以把不同类型的变量放到一起。 类的声明方式: classee类名 { private: 私有的一般修饰数据成员(变量) public: 公有的一般修饰成员函数(函数) protected: 保护的常用于继承,后面章节介绍 }; 2、c++语言的特点是抽象(把一组对象的共同特证抽象出来形成类)、封装(指private)、继承、多态性(指函数重载、虚函数)等。 【注意】: 在类中声明的任何成员不能使用extern,auto,register(寄存器)关键字进行初始化。 3、private: 只能被本类的成员函数访问 public: 可以所有的函数访问(但必须通过对象) protected: 只能被本类和子类(派生类)的成员函数访问 三者的顺序可以颠倒 4、定义对象: 类名变量名 ex: students1;定义一个对象 5、调用成员函数(2种) (1)对象.成员函数ex: s1.show(); (2)指针名->成员函数ex: p->show(); 6、构造函数作用: 对数据成员进行初始化。 定义对象时调用该函数。 7、默认构造函数: 如果没有定义构造函数,系统会自动调用默认的构造函数来生成对象,但是没有初始值,即可以定义无参数的对象。 ex: students1;s1无初值,可不定义构造函数,使用系统的默认构造函数。 有初值的话,必须定义构造函数ex: students2(001,95,100); 【注意】: 一旦自定义了构造函数,系统就不再提供默认的构造函数,如果再定义无参的对象,必须重新定义无参的构造函数 8、析构函数作用: (有没有都行,不写系统会调用默认的) 释放数据成员申请的空间。 撤销对象时自动调用析构函数。 一般形式: ~Student(){} 9、默认析构函数: 可以不定义析构函数,系统自动调用默认的析构函数来释放空间。 (不管是有值对象还是无值对象) 10、构造函数与析构函数的异同: 相同点: 函数名都与类名相同 二者都无返回值 不同点: 析构函数名前多一个~ 析构函数不能带参数 析构函数最多有一个,构造函数可以有任意多个 11、初始化列表(构造函数中)引用&、const修饰的变量、对象成员必须采用初始化列表 ex: student: : student(intn,inte,intc): number(n),english(e),computer(c){} 等效于: student: : student(intn,inte,intc){number=n;english=e;computer=c;} 二、复制构造函数(有没有都行,不写系统会调用默认的实现赋值) 1、作用: 通常用于使用已有的对象来建立一个新对象 2、声明方式举例: student: : student(student&)其中student为类型 student: : student(conststudent&)使用const为了不改变原有对象 定义student: : student(student&s){number=s.number;english=s.english;computer=puter;} 3、调用复制构造函数的3种情况: (1)使用已知对象去初始化另一个对象 students1(1,2),s2;s2=s1; (2)函数的参数是对象,发生调用时 (3)函数的返回值是对象 书上例4.9很好,综合考查了构造函数,析构函数,复制构造函数的调用 三、this指针 1、导入: 使用s1.show(),怎么知道就是对s1的数据成员进行操作,而不是对s2呢。 2、作用: 使用this指针保证每个对象可以拥有自己的数据成员,但处理这些数据成员的代码可以被所有的对象共享。 3、原因: 系统自动向成员函数传递一个隐含的参数,该参数是一个指向调用该函数的对象的指针this,从而使成员函数知道对那个对象进行操作。 附: 在类中声明的标识符(数据成员)只在类中有效 四、对象、类、消息 1、消息(函数): 是向对象发出的服务请求,它是面向对象系统中实现对象间的通信和请求任务的操作。 2、对象传递的消息一般由3部分组成: 接收对象名、调用操作名和必要的参数。 五、编译指令 1、嵌入指令: #include 2、宏定义: #definePI3.1415926不再使用时用#undef删除 3、条件编译指令: #if,#else,#elif,#endif 4、define操作符: 不是指令,而是一个预处理操作符。 第五章特殊函数和成员 5.1、对象成员 1、定义: 把一个类中的对象作为某个类的数据成员,这个成员叫做对象成员。 2、初始化对象成员: 必须通过构造函数的初始化列表形式 classA{intx;}; classB {Aa;inty; public: B(intm,intn): a(m){y=n;}}; 注意此时是对象名,不是类名A(m),注意与派生类构造函数写法的区别 3、调用顺序: 取决于对象成员在类中说明的顺序,与在成员初始化列表中给出的顺序无关。 4、【注意】: 初始化对象成员、const成员、引用成员时,必须通过初始化列表形式。 基本数据成员使用哪种方式都可以。 5.1例题很好 5.2、静态成员 1、引入: 简单成员函数: 是指声明中不含const、volatile、static关键字的函数。 2、定义: 使用关键字static修饰的成员称为静态成员函数或静态数据成员。 ex: classA{ staticintx;//静态数据成员(38人) inty; public: staticvoidshow(Aa){cout< }; 3、初始化静态数据成员: (通常类外进行) intA: : x=38; 4、调用静态成员: 类名: : 静态成员 ex: A: : show();新加的 a.show(); 5、【注意】: (1)静态成员是所有对象共有的,是类的成员,不是对象的成员,在程序一开始运行时就被分配,并且在整个文件中作用域可见。 (2)任何成员函数都可以访问静态成员。 但静态成员函数不能直接访问非静态数据成员。 只能通过对象名.的形式访问。 原因是缺少this指针 (3)静态成员函数不能被说明为虚函数。 6、应用: 通常把所有对象拥有的属性值相同的值设成静态数据成员,ex: 班级人数对每个学生来说都是一样(如本二班是38人),设成静态后只占一个空间,在对象产生以前就生成了,而普通数据成员对每个对象都开辟一个空间。 5.3、友元函数-不是类的成员函数,没有this指针 1、引入: 私有成员只能被本类的成员函数访问,要是类外部的某个函数需要访问怎么办? 2、以前学过一种解决办法,例4.9类外函数的参数定义成对象,则可。 11,12行,为普通的函数,通过对象名.成员函数来访问私有的 3、专门定义一个--友元函数来解决该难题。 谁要访问,就在谁前面加上friend关键字放入要访问的类中。 4、三种形式: (1)类本身的友元函数: 普通函数访问一个类的私有成员例5.4很好 (2)成员函数用做友元: 想让一个类的一个函数访问另外一个类的私有成员例5.5很好 (3)将一个类声明为另外一个类的友元: 让一个类的所有函数都可以访问另外一个类的私有成员例5.6很好 5、友元函数的写法: (1)形参一定是类对象的引用或者是类的对象 (2)如何访问: 采用对象名.私有的数据成员的形式来访问私有的数据成员 5.4、const对象---只能访问const成员函数 1、常量成员: 常(量)数据成员(constinta)、静态常数据成员(staticconstintb)、常引用(constint&c) 2、常成员函数的声明方式: voidshow()const{cout< 注: 普通对象可以访问所有的成员函数,但是常对象只能访问常成员函数,出现重载现象时普通对象优先访问普通成员函数例5.8 3、常对象的声明方式: constAa(1,3);Aconsta(1,3);二者等效 4、注意: 常数据成员只能通过初始化列表进行初始化 编写程序: 在中国银行存款数为私有的数据成员x,要求在该银行类的存款数为常量。 定义一个常成员函数show()实现输出该存款数。 定义对象赋初始值测试该函数。 5.5数组和类 1、引入: Bankb(1000,122);Bankc(10000,999); (1)可替换成对象数组 Banka[2]={Bank(1000,122),Bank(10000,999)};//掌握数组对象的写法 a[0].show();a[1].show(); (2)也可替换成对象数组, Bank*a[2]={newBank(1000,122),newBank(10000,999)};//开辟动态空间的方式 a[0]->show();a[1]->show(); 书上例题: 很好 5.6、指向类成员函数的指针-访问成员函数的另外一种方式 1、引入: 用指针指向数组的首地址,则可以访问数组的全部内容,同样可以声明一个指针,让其指向函数的首地址,从而访问整个函数。 2、具体操作三部曲: (1)声明方式: 返回值类型(类名: : *指针名)(函数参数) ex: 定义一个指针pafn,它可以指向任何无参数和无返回值的类A的成员函数: void(A: : *Pafn)(void); 定义一个指针pafn,它可以指向任何参数为int的和返回值为int的类Piont的成员函数: int(Piont: : *Pafn)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c+ 知识点