课件及板书面向对象实践_第1页
课件及板书面向对象实践_第2页
课件及板书面向对象实践_第3页
课件及板书面向对象实践_第4页
课件及板书面向对象实践_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

面向对象VS面向结构 多 28 类 容器 LIST链 VS.NET2015vc++编译:将源代码(xxx.cxxx.cpp)转变成目VS.NET创建解决方案文件夹(虚拟文件夹),编译:将源代码(xxx.cxxx.cpp)转变成目连接:源文件一起打包转变成可执行文件Ghost版本系统不推荐使用.计算机操作Win10(C盘C本人:1天的时间ghostC盘(win10-随便用吧,系统坏了ghost恢复系统(15分钟cbasicPascal等语言面向对象程序设计吸取了结构化程序设计的面向对象程序设计将数据及对数据的操作放三国时期,吟道“喝酒唱歌,人生真样张出来给一看感觉不爽修改为:生几何。当大臣转告工匠之时,工匠昏 要改,只需要改要改的字,此为可后来的印刷中重复使用,此为可复用此诗若要加字,只需要另刻字加入即可,从用户的角度去搞清楚实际的工作完成方法从软件开发方法,技术的角度分析软件开发的从软件开发的角度分析要使用用户工作,软件必须完成的功能模块有哪些?不涉及具体如何实现需求规格说明书等大体的说,该软件有哪些功能模块,模块的调用 概要设计文档等详细设计文档等将详细设计阶段得出的文档转变成源代码.可以选择的实现语言:C语言/C++/C#/Java.程序编码文档由另外一个部门的系统分析师/软件设计师进测试报告等运行方向2006面向对象分析的第一步是33 B.确定附加的系统约CD.定义类和对象服务=面向对象=类+继承+对象+类是对具有相同属性和服务的一个或一组对classStudent{定义一个“Studentprivate://private可省略不写(位于第一个位置可省略charvoidChangeMark();//私有段一般不放服务(函数,动作) int char*GetName();charprivate:私有段数据或属性,此privatechar*name; intmark;Studentstu;//private,proteced,public三段对象(object)是系统中用来描述客观事物的一向对象方法学使用对象分解取代了传统方法的功属性:也称状态或数据,用来描述对象的服务:也称操作、行为或方法等,用来描述对象的动态特征。某些面向对象程序设计语言封装的一个重要原则,目的是使对象的定义与对象是其全部属性和全部服务紧密结合而的数据操作的代码都被封装在黑盒子里面。构细节操作的算法。从外面看不见,更不可处于私有段(private)的属性或行为是不向外公开的,只在类定义体中的函数体中,即使处于保护段(protected)的属性或行为只对可直接但“对象名.保护属性或行为”这种写法过“对象名.公有属性或行为”这种方式公有段主要是向外界提供一个私有段和保护段的一#include<iostream>usingnamespacestd; private://可以省略不写doubleheight;doubleweight;doublemoney;(doublex,doubley,double构造函数,height=x;weight=y;money=}void{}void{ }是面向对象程序设计语言不同于其它语言的classclassclassE:privateA{//classB:publicclassC:publicclassD:protectedclassF:privateA,protectedB,C,publicD//{BAACBBC的直是它的直接基类外,A也是它的基类,但是是间接A,B,C,DCardelli和、Wegner4包含多态:在许多语言中都存在,最常见入了派生概念后用来表现基类和派生类的成员函过载多态:同一个名字在不同的上下文中强制多态:编译程序通过语义操作,把操的要求。程序设计语言中基本类型的大多数操作进行强制多态的操作。如int+double,编译系统一intdoubledouble+doubleint->double多态性不仅增加了面向对象软件系统的灵活消息:就是向对象发出的服务请求,它包消息通信:也是面向对象方法学中的一个绑定是一个把过程调用和相应调用所需要执据接收对象的具体情况将请求的操作与实现的方可性用性高、可性好、扩展性强!在C语言中允许动态地分配空间及动态地释放已分配的空间,它所使用的是函数malloc()和()。申请:int*p=(int释放 malloc()相比,具有以下优越性:new既省事,又可以避免量分配的偶然性错误它自动返回正确的指针类型,不必对返回newnewdeletenew=new变量类型(初始化值int*s=newint*s=(int这里定义了一个整型变量(不知道此变量的名变量动态分配了空间,并将地址赋给*s;s=new这里定义了一个整型变量(不知道此变量的名字)200,s为指向该整型变量所在的*p=newint[10];等价于intnew10的数组,并用一个指针(p指针)指向此数组的首地址。deletedeletenew分配的。intint*s;s=newint(200);deletes;int*p=newstaticstatic来定义,是用来实现同一个类的不同对象之classclasscounter{staticintcount;//intobjnum;voidstaticvoidprint()//{}countercounterstatic时,作为静态静态成员函数的对象名.静态成员函数(“.”并不表示所属类名::静态成员函数(既是所属关系,又是调用关系3.静态成员函数不能像一般的成员函数那样随意地对象中的非静态的数据内容一般情况下,静态的成员函数里面只静态的成员变#include<iostream>#include<string>usingnamespacestd;classMyString{staticinttotalLength;intlength;char*contents;MyString(char{this->length=strlen(s);//contents=s;contents=newchar[length+1];}void{}int{return}staticintSetTotalLength(MyString{totalLength+=obj.GetLength();returntotalLength;}{delete}intMyString::totalLength0;//此行能否不要voidmain(){char*s="thefirstobject";MyStringobj1("thefirstobject");MyStringobj2("thesecondobject");}this:对象自身(c++中称为this),是面向对对象都有属于自己的对象自身值。classclassclassy:privateyx类的派生类,xy(此处为私说基类的所有公有成员和保护段成员只能成为私有派生类的私有成员(private),这些私有成员只能被派生类的成员函数而派生类的使用者无#include<iostream>usingnamespacestd;classx{inta;x(inty){ay;}//构造函数初始化intgetPub(){returna;}int returna;classy:x{私有继承,classy:privatexintb;y(inty):x(y){b=y;}//构造函数定义,缀上基类的构int{b=getPub()+10;//getPub()是基类提供 b=return}void{{xycout<<x1.getPub()<<endl;//y1.getPub }问题:y1x1public成员和保护段成员变成为公有派生类的公有成员#include<iostream>using#include<iostream>usingnamespacestd;classx{inta;x(intx) {a=x;}//构造函数初始化intgetPub(){returna;}int returna;classy:publicx{intb;y(inty):x(y){b=y;}intmake(){b=getPub()+10;b=getPro()+20;returnb;}void{xy}问题: //正确吗cout<<y1.getPro()<<endl;//y是xgetPub中是保护段成员,所以派生类对象y1能直接getPub(),但不能直接getPro()。#include<iostream>usingnamespacestd;classx{inta;x(intx) {#include<iostream>usingnamespacestd;classx{inta;x(intx) {ax;}//构造函数初始化intgetPub(){returna;}int returna;classy:protectedx{intb;y(inty):x(y){b=y;}//构造函数定义,缀上基类的构int{b=getPub()+10;b=getPro()+20;returnb;}}void{xy}问题:cout<<y1.getPub()<<endl;//正确吗?cout<<y1.getPro()<<endl;//由于y是xgetPub()20063O、PQO中定义了一classP:protectedO{…};classQ:publicO{…};F1的描述中正确的是(34)F2(35)F3的描述中正确的是(36)。A.F1只有在类o内才能方法只有在类P内才能方法只有在类Q内才能方法A.类O、P和Q的对象都可以方法类P和Q的对象都可以方法类o和Q的对象都可以方法只有在类P内才能方法A.类0、P和Q的对象都可以方法类o、p和Q的对象都不可以方法类0和Q的对象都可以方法类P和Q的对象都可以方法F3#include<iostream>using#include<iostream>usingnamespacestd;classNumber{inti;char*s1;intMax(inta){returna>i?a:i;}char*Max(char*c){return}Number(intx,char this->s1=y;void{Numbernum(10,"}上例中的多态通过函数重载来实现,重载(译时的多态性通过重载来实现)了两个函数,均为虚函数的作用(看下面的例子#include<iostream>usingnamespacestd;classFather{void{}classSon1:publicFather{voidWho()//自己定义-{}classSon2:public{voidWho()//自己定义-{}}void{Father*p;Son1obj1;Son2p=&obj1;//基类指针指向派生类对象obj1p=&obj2;//基类指针指向派生类对象obj2p->Who();}但实际输出结果基类基类不满足编程者意愿基类不满足编程者意愿通过指针引起的普通成员函数调用,仅仅与指针的类型有关,而与此指针指向什么对象无不管指针p当前指向哪个对象(是基类对象还是派生类对象),p->Who()调用的都是基类中定Who()函数版本。通过子类对象显示调用:obj1.Who强制转换基类指针:((Sun1*)p)-把who()函数为虚函数或纯虚函数。classbase{virtualvoid//virtualvoid仅仅返回类型不同,其余均相同,系统会函数原型不同,仅函数名相同,系统会将(方法virtual=0,我们2004●重置的基本思想是通过(48)机制的支持,(48)A.静态绑定B.对象C.类型匹配D如果类之间频繁共享同一函数或数据,则C++中的为封装隐藏这堵不透明的墙当然使元会使数据封装性受到削弱,程序可性变差因此一定要慎重使用只要将外界的某个对象说明为某一个类的友元那么这个外界对象就可以这个类对象中的为的外界对象既可以是另一个类的函数都成为函数。包含在其私有成员可被作为的外界对象的类定义中,也就是将friend关键字放在函数名或类名的前面此可以放在公有部#include<iostream>using#include<iostream>usingnamespacestd;classPoint{intx,y;Point(intx,intfriendvoid在这个例子中,在这个例子中,voidPrint()Point,Point::Point(intx,int{this->x=x;this->y=}voidPrint(Point cout<<point1.x<<"}void{Point//cout<<point1.xpoint1.y;行不行?}它可以Point类对象的私有成员x,y。 #include<iostream>using#include<iostream>usingnamespacestd;classPoint{intx,y;Point(intx,intfriendclassFriendOfPoint;friendvoidPrint(Pointp);classvoidPrint(Point{ }Point::Point(intx,int{Point::x=x;//可以换成this->x=x; Point::y=y;//可以换成this->y= }voidPrint(Point{ }void{Pointpoint1(5,6);FriendOfPointfriOfPoint;}以上例子中,FriendOfPointPointFriendOfPoint类的所有对象都可以PointPrint不属于任何一Point的函数,所以它也可以直接Point类对象point1的私有成员。类属是程序设计语言中普遍注重的一种参数常强,它是无约束类属机制和约束类属机制的集模板格式说明体temte是一个模板的关键字,它表示正在一个模板。模板参数表是由若干个模板参数组成的,每个模板参数均是由类型参数和参数说明两部分class说明体是指模板定义体,或为函数模板的intmax(intintmax(intx,int{return}floatmax(floatx,float{return} x,{return}char*max(char*x,char{return}板的形式可以避免这些相同信息的重复。定义如te<classTmax(Tx,T{return}其中<classT>classTT预定义类型、用户自定义类型。这样定义的max代表的是一类函数,所以是函数模板。如果这个maxT(int等TT#include<iostream>using#include<iostream>usingnamespacestd;temte<classT>TGetMax(Tx,T{return}void{intfloatx1=50.34f,x2=56.34f;doubley1=673.36,y2=465.972;cout<<"themaxofi,jis:"<<GetMax(i,j)<<endl;cout<<"thecout<<"themaxofi,jis:"<<GetMax(i,j)<<endl;cout<<"themaxofx1,x2is:"<<GetMax(x1,x2)<<endl;cout<<"themaxofy1,y2is:"<<GetMax(y1,}2004(1)机制。的是这些类的成员特征中与(2)变元来表示与(3)A.包含多态B.参数多态C.过载多态D.强制多态A.具体对象无关B.具体类型无关C.具体对象相关D.具体类型相关(3)A.具体对象无关B.具体类型无关C.具体对象相关D.具体类型相关它们都没有返回值说明,定义它们的时候不需函数返回值类型。C++函数一样,构造函数可以用usingnamespacestd;classPoint{intx,y;Point(intvx,intvy);//带参数的构造函数voidOffSet(intax,intay);Point::Point(intvx,int{y=}voidPoint::OffSet(intax,int{}void{Pointpt1(10,20);}usingnamespacestd;classSet{int intSet(inti);//Set::Set(int{size=i;}void{Sets1(64);Sets2(16);Sets3(8);Sets4;}s1sizes2size816小;s4时,并没有给构造函数传递参数。因为在i16,构造函数就使函数中缺省参数并不只限于含有单个参数的usingnamespacestd;classPoint{intx,y;Point(intvy,int{}void{Pointp1;//错误Pointp2(10);Pointp3(10,20);}p1,p2,p3x,y取得不同的值。p1,p2p2x取值为10y0。p3yx10y所有取缺省值的参数必须出现在不取缺省参数的Point(intPoint(intx,inty=0);//Point(intx=0,inty);//usingnamespacestd;classx{inta,b;x(intc,int{//a}void{ }void{x}}usingnamespacestd;classA{virtualvoid{}classB:publicA{void{}void{A*p=newB();A*q=newB;A*r=A*o=newA();A*w=newA;A*z=Aa=Ab;}基类类型指针可以指向任何派生类对象ok#includevectorstd命名域的,因此需要通过命名usingstd::vector;vector<int>或者连在一起,使用全名:std::vector<int>建议使用全局名域方式:using (beg,end)cnelem的c。vInts.at(idx)idx所指的数据,如idxout_of_range。vInts.back()传回最后一个数 查这个数据是否vInts.begin()传回迭代器中的第一个数据vInts.capacity()返回容器中单元个数vInts.clear()vInts.empty()vInts.end()指向迭代器中的最后一个数据vInts.erase(pos)pos 删除[beg,end)区间的vInts.front()vInts.get_allocator使用构造函数返回一个vInts.inse

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论