《c++程序设计基础.pptx》由会员分享,可在线阅读,更多相关《c++程序设计基础.pptx(99页珍藏版)》请在第壹文秘上搜索。
1、问题的提出问题的提出 结构化程序设计方法将解决问题的重点放在如何实现过程结构化程序设计方法将解决问题的重点放在如何实现过程的细节方面,而把数据和对数据进行操作的函数截然分开,的细节方面,而把数据和对数据进行操作的函数截然分开,以数据结构为核心,围绕着功能实现或操作流程来设计程以数据结构为核心,围绕着功能实现或操作流程来设计程序。序。 程序的基本形式是主模块与若干子模块的组合,即一程序的基本形式是主模块与若干子模块的组合,即一个主个主函数(函数(main 函数)和若干子函数函数)和若干子函数。程序以函数为单位,函。程序以函数为单位,函数之间以数据作为连接的纽带。数之间以数据作为连接的纽带。 把数
2、据和操作分开对待把数据和操作分开对待,一旦数据的格式或结构发生变化,一旦数据的格式或结构发生变化,相应的操作函数就得改写,而且对于核心数据的访问往往相应的操作函数就得改写,而且对于核心数据的访问往往也得不到有效控制。也得不到有效控制。教学目标教学目标 理解面向对象的概念,理解面向对象程序设计的思想,理解面向对象的概念,理解面向对象程序设计的思想,理解面向对象程序设计的基本方法。理解面向对象程序设计的基本方法。 理解抽象、封装、继承、多态等概念。理解抽象、封装、继承、多态等概念。 理解类与对象的概念,掌握程序设计中类与对理解类与对象的概念,掌握程序设计中类与对象的定义方法。象的定义方法。 理解基
3、类、派生类概念、了解派生类的定义方法。理解基类、派生类概念、了解派生类的定义方法。 理解多态性与虚拟函数的概念,了解虚拟函数的定义理解多态性与虚拟函数的概念,了解虚拟函数的定义方法。方法。1.函数的重载函数的重载 函数的重载:一个函数可以对应多个函数的实现,可以函数的重载:一个函数可以对应多个函数的实现,可以实现不同的功能实现不同的功能 重载函数:重载函数:具有相同的名称,具有不同的参数个数或参具有相同的名称,具有不同的参数个数或参数类型数类型【例例】用重载函数求两个整数或实数中的最大数用重载函数求两个整数或实数中的最大数 #include int max(int a,int b) if(ab
4、) return a; else return b; float max(float a,float b) if(ab) return a; else return b; void main() int a,b; float x,y; cinab; cinxy; coutmax(a,b)=max(a,b)endl; coutmax(x,y)=max(x,y)endl; #include double max(double a,double b) if(ab) return a; else return b; void main() int x,y; cinxy; coutmax(x,y)=ma
5、x(x,y)b) return a; else return b; 能否得出正确的运行结果?能否得出正确的运行结果?max(float)x,(float)y)2.带默认参数的函数带默认参数的函数 允许实参和形参个数不同允许实参和形参个数不同 在形参表中各一个或几个形参指定默认值在形参表中各一个或几个形参指定默认值 若没有给指定默认值的形参传值,函数自动使用形参的若没有给指定默认值的形参传值,函数自动使用形参的默认值默认值【例例】设计一个函数,既可以找出两个整型数的最大值,又设计一个函数,既可以找出两个整型数的最大值,又可以找出三个数的最大值可以找出三个数的最大值 #include int ma
6、x(int x,int y,int z=-32768) if(yx)x=y; if(zx)x=z; return x; main() int a,b,c; coutabc; if(c-32768)coutmax(a,b,c)=max(a,b,c)endl; elsecoutmax(a,b)=max(a,b)endl; 赋予默认的参数必须放赋予默认的参数必须放在形参表的最右端在形参表的最右端注意:注意:不要同时使用带默认参数的函数和重载函不要同时使用带默认参数的函数和重载函数数(参数个数不同参数个数不同)3.C+新增运算符新增运算符 作用域运算符作用域运算符 :指定变量的作用域,可以访问当前作用
7、于之外的变量指定变量的作用域,可以访问当前作用于之外的变量#includeint x=20;/全局变量全局变量void main()float x=8.9;/局部变量局部变量coutx=xendl;/输出局部变量输出局部变量cout“x=”:xendl;/输出全局变量输出全局变量 动态内存分配与撤销运算符动态内存分配与撤销运算符v new自动为变量分配正确长度的内存空间自动为变量分配正确长度的内存空间v 分配成功则返回指定类型的一个指针分配成功则返回指定类型的一个指针v 若不成功则返回若不成功则返回0v 格式:格式:v new 类型类型 初值初值int *p;p=new int(10);/为指
8、针分配为指针分配10个字节的内存单元个字节的内存单元int *p;p=new int10;/为指针分配为指针分配10个整型元素内存单元个整型元素内存单元v Delete必须用于先前用必须用于先前用new分配的有效指针分配的有效指针v 格式:格式: delete 指针变量;指针变量;#include void main()int *p;p=new int10; /为指针为指针p分配分配10个元素的整型数组个元素的整型数组 /的内存单元的内存单元if(!p) /判断返回的是否为空指针判断返回的是否为空指针cout内存分配失败内存分配失败endl;for(int i=0;i10;i+)pi=i; /
9、为为p所指内存单元赋值所指内存单元赋值coutpi ; /输出输出p所指内存单元的值所指内存单元的值delete p; /释放为指针释放为指针p分配的内存单元分配的内存单元4.类和对象类和对象 类的定义类的定义v 将将不同类型的数据不同类型的数据和对这些数据相关的和对这些数据相关的操作操作封装在一起封装在一起class 类名类名 private: 私有成员数据及函数私有成员数据及函数; protected: 保护成员数据及函数保护成员数据及函数; public: 公有成员数据及函数公有成员数据及函数;只能被本身的成员函数调用,外只能被本身的成员函数调用,外界不能调用界不能调用只能被本身的成员函
10、数调用,可只能被本身的成员函数调用,可以被继承以被继承类与外部的接口,任何外部函数类与外部的接口,任何外部函数都可以访问公有数据或函数都可以访问公有数据或函数class Employee private: /私有成员数据私有成员数据 char EmployeeID20; char EmployeeName50; char sex; public:/公有成员数据及函数公有成员数据及函数; Employee(); void display();类定义只说明产生了一种新的数据类型,并没类定义只说明产生了一种新的数据类型,并没有为该类数据分配内存空间。有为该类数据分配内存空间。 对象的定义对象的定义v
11、 两种方式定义对象:两种方式定义对象:1先定义类再定义变量先定义类再定义变量class Employee private: /私有成员数据私有成员数据 char EmployeeID20; char EmployeeName50; char sex; public: Employee(); /公有成员数据及函数公有成员数据及函数; void display();Employee ep1,ep2;2定义类的同时定义变量定义类的同时定义变量class Employee private: /私有成员数据私有成员数据 char EmployeeID20; char EmployeeName50; ch
12、ar sex; public: Employee(); /公有成员数据及函数公有成员数据及函数; void display(); ep1,ep2; 成员函数的定义成员函数的定义v 只有类的成员函数才能存取该类对象的私有数据成员只有类的成员函数才能存取该类对象的私有数据成员class rect_area private: /私有成员数据私有成员数据 float len; float width; float area; public: /公有成员数据及函数公有成员数据及函数; void area() area=len*width; cout“area=”areaendl; ;rect_area
13、rectangle;方法的实现方法的实现(成员函数的函数体成员函数的函数体)可以可以在类的内部在类的内部完成完成(类的内联类的内联函数函数),也可以也可以在类的外部在类的外部实现,实现,而且可以与类的定义放在同一而且可以与类的定义放在同一个源文件中,也可放在不同的个源文件中,也可放在不同的源文件中。源文件中。class rect_area private: /私有成员数据私有成员数据 float len; float width; float area; public: /公有成员数据及函数公有成员数据及函数; void area(float len,float width); ;rect_a
14、rea rectangle;若成员函数的实现在类定义的外部,则定义是若成员函数的实现在类定义的外部,则定义是必须在函数名前加上类名,中间用必须在函数名前加上类名,中间用“:”隔开隔开void rect_area:area(float len,float width) area=len*width; cout“area=”areaendl; 一般将类的定义放在一般将类的定义放在.h的文件中,而把成员函数的实现放的文件中,而把成员函数的实现放在一个与在一个与.h文件同名的文件同名的.cpp文件中文件中类的成员数据可以是任意类型,但不能对成员数据初始化类的成员数据可以是任意类型,但不能对成员数据初始
15、化class rect_area private: /私有成员数据私有成员数据 float len=10; float width=20; float area; public: /公有成员数据及函数公有成员数据及函数; void area() area=len*width; cout“area=”areaendl; ;rect_area rectangle; 类的私有成员类的私有成员v 只有类本身的成员函数或其友元函数可以使用。只有类本身的成员函数或其友元函数可以使用。 #include class rect_area private: float len; float width; flo
16、at area; public: void qarea() area=len*width; coutarea=areaendl; rectangle;void main() rectangle.len=10; rectangle.width=20; rectangle.qarea(); public: 类的公有成员类的公有成员v 可以被类本身的成员函数和外部函数可以使用。可以被类本身的成员函数和外部函数可以使用。 #include class rect_area private: float area; public: void qarea(float len,float width) area=len*width; coutarea=areaendl; rectangle;void main() rectangle.qarea(10,20); 内联函数内联函数v 在类内部定义的成员函数。可提高程序的运行速度,在在类内部定义的成员函数。可提高程序的运行速度,在调用处用内联函数体的代码替换,不需要进行现场处理,调用处用内联函数体的代码替换,不需要进行现场处理,节省了时间和空间开销。节省了