c++程序设计基础

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第十一章C++程序设计基础问题的提出•结构化程序设计方法将解决问题的重点放在如何实现过程的细节方面,而把数据和对数据进行操作的函数截然分开,以数据结构为核心,围绕着功能实现或操作流程来设计程序。•程序的基本形式是主模块与若干子模块的组合,即一个主函数(main函数)和若干子函数。程序以函数为单位,函数之间以数据作为连接的纽带。•把数据和操作分开对待,一旦数据的格式或结构发生变化,相应的操作函数就得改写,而且对于核心数据的访问往往也得不到有效控制。教学目标•理解面向对象的概念,理解面向对象程序设计的思想,理解面向对象程序设计的基本方法。•理解抽象、封装、继承、多态等概念。•理解类与对象的概念,掌握C++程序设计中类与对象的定义方法。•理解基类、派生类概念、了解派生类的定义方法。•理解多态性与虚拟函数的概念,了解虚拟函数的定义方法。1.函数的重载•函数的重载:一个函数可以对应多个函数的实现,可以实现不同的功能•重载函数:具有相同的名称,具有不同的参数个数或参数类型【例】用重载函数求两个整数或实数中的最大数#includeiostream.hintmax(inta,intb){if(ab)returna;elsereturnb;}floatmax(floata,floatb){if(ab)returna;elsereturnb;}voidmain(){inta,b;floatx,y;cinab;cinxy;coutmax(a,b)=max(a,b)endl;coutmax(x,y)=max(x,y)endl;}#includeiostream.hdoublemax(doublea,doubleb){if(ab)returna;elsereturnb;}voidmain(){intx,y;cinxy;coutmax(x,y)=max(x,y)endl;}floatmax(floata,floatb){if(ab)returna;elsereturnb;}能否得出正确的运行结果?max((float)x,(float)y)2.带默认参数的函数•允许实参和形参个数不同•在形参表中各一个或几个形参指定默认值•若没有给指定默认值的形参传值,函数自动使用形参的默认值【例】设计一个函数,既可以找出两个整型数的最大值,又可以找出三个数的最大值#includeiostream.hintmax(intx,inty,intz=-32768){if(yx)x=y;if(zx)x=z;returnx;}main(){inta,b,c;coutEnterabc:;cinabc;if(c-32768)coutmax(a,b,c)=max(a,b,c)endl;elsecoutmax(a,b)=max(a,b)endl;}赋予默认的参数必须放在形参表的最右端注意:不要同时使用带默认参数的函数和重载函数(参数个数不同)3.C++新增运算符•作用域运算符::指定变量的作用域,可以访问当前作用于之外的变量#includeiostream.hintx=20;//全局变量voidmain(){floatx=8.9;//局部变量coutx=xendl;//输出局部变量}cout“x=”::xendl;//输出全局变量•动态内存分配与撤销运算符new自动为变量分配正确长度的内存空间分配成功则返回指定类型的一个指针若不成功则返回0格式:new类型[初值]int*p;p=newint(10);//为指针分配10个字节的内存单元int*p;p=newint[10];//为指针分配10个整型元素内存单元Delete必须用于先前用new分配的有效指针格式:delete[]指针变量;#includeiostream.hvoidmain(){int*p;p=newint[10];//为指针p分配10个元素的整型数组//的内存单元if(!p)//判断返回的是否为空指针{cout内存分配失败endl;}for(inti=0;i10;i++){p[i]=i;//为p所指内存单元赋值coutp[i]'';//输出p所指内存单元的值}delete[]p;//释放为指针p分配的内存单元}4.类和对象•类的定义将不同类型的数据和对这些数据相关的操作封装在一起class类名{private:私有成员数据及函数;protected:保护成员数据及函数;public:公有成员数据及函数;};只能被本身的成员函数调用,外界不能调用只能被本身的成员函数调用,可以被继承类与外部的接口,任何外部函数都可以访问公有数据或函数classEmployee{private://私有成员数据charEmployeeID[20];charEmployeeName[50];charsex;public://公有成员数据及函数;Employee();voiddisplay();};类定义只说明产生了一种新的数据类型,并没有为该类数据分配内存空间。•对象的定义两种方式定义对象:1.先定义类再定义变量classEmployee{private://私有成员数据charEmployeeID[20];charEmployeeName[50];charsex;public:Employee();//公有成员数据及函数;voiddisplay();};Employeeep1,ep2;2.定义类的同时定义变量classEmployee{private://私有成员数据charEmployeeID[20];charEmployeeName[50];charsex;public:Employee();//公有成员数据及函数;voiddisplay();}ep1,ep2;•成员函数的定义只有类的成员函数才能存取该类对象的私有数据成员classrect_area{private://私有成员数据floatlen;floatwidth;floatarea;public://公有成员数据及函数;voidarea(){area=len*width;cout“area=”areaendl;}};rect_arearectangle;方法的实现(成员函数的函数体)可以在类的内部完成(类的内联函数),也可以在类的外部实现,而且可以与类的定义放在同一个源文件中,也可放在不同的源文件中。classrect_area{private://私有成员数据floatlen;floatwidth;floatarea;public://公有成员数据及函数;voidarea(floatlen,floatwidth);};rect_arearectangle;若成员函数的实现在类定义的外部,则定义是必须在函数名前加上类名,中间用“::”隔开voidrect_area::area(floatlen,floatwidth){area=len*width;cout“area=”areaendl;}一般将类的定义放在.h的文件中,而把成员函数的实现放在一个与.h文件同名的.cpp文件中类的成员数据可以是任意类型,但不能对成员数据初始化classrect_area{private://私有成员数据floatlen=10;floatwidth=20;floatarea;public://公有成员数据及函数;voidarea(){area=len*width;cout“area=”areaendl;}};rect_arearectangle;•类的私有成员只有类本身的成员函数或其友元函数可以使用。#includeiostream.hclassrect_area{private:floatlen;floatwidth;floatarea;public:voidqarea(){area=len*width;coutarea=areaendl;}}rectangle;voidmain(){rectangle.len=10;rectangle.width=20;rectangle.qarea();}public:•类的公有成员可以被类本身的成员函数和外部函数可以使用。#includeiostream.hclassrect_area{private:floatarea;public:voidqarea(floatlen,floatwidth){area=len*width;coutarea=areaendl;}}rectangle;voidmain(){rectangle.qarea(10,20);}•内联函数在类内部定义的成员函数。可提高程序的运行速度,在调用处用内联函数体的代码替换,不需要进行现场处理,节省了时间和空间开销。#includeiostream.hclassrect_area{private:floatarea;public:voidqarea(floatlen,floatwidth){area=len*width;coutarea=areaendl;}}rectangle;#includeiostream.hclassrect_area{private:floatarea;public:voidqarea(floatlen,floatwidth);}rectangle;voidrect_area::qarea(floatlen,floatwidth){area=len*width;coutarea=areaendl;}inline内联函数一定在调用前定义,且不允许有循环语句和开关语句,无法递归调用。voidmain(){rectangle.qarea(10,20);}•构造函数类体中不允许对数据成员进行初始化用构造函数来初始化对象的数据成员,使对象在被使用之前处于一个合理的状态。为什么要用构造函数?classclassname{public:classname();//构造函数};♣一般声明为public♣构造函数的名字必须与所在的类名相同♣没有返回值,也不需要加void类型声明♣在定义类的对象时,由系统自动调用该类的构造函数,而且只能调用一次。♣若在类定义时没有定义任何构造函数,由系统自动生成一个不带参数的默认构造函数classname::classname(){}♣在程序中定义一个对象没有指明初始化,则编译器按默认的构造函数来初始化对象,对象的所有数据初始化为0或空。#includeiostream.hclassrect_area{private://声明下面部分为私有数据成员floatarea;floatlen;floatwidth;public:rect_area()//构造函数{len=10;width=20;area=len*width;coutarea=areaendl;}};voidmain(){rect_areaqarea;}#includeiostream.hclassrect_area{private://声明下面部分为私有数据成员floatarea;floatlen;floatwidth;public:rect_area(floatlen=10,floatwidth=20)//构造函数可以有默认参数{area=len*width;coutarea=areaendl;}};voidmain(){rect_areaqarea;}构造函数在定义对象的同时调用,如果要通过实参给构造函数传递数据,可以采用如下形式来定义对象。类名对象名(实参表);voidmain(){rect_areaqarea;rect_areaqarea1(30,20);rect_areaqarea2(20,20);}构造

1 / 90
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功