7对象和类PPT格式课件下载.ppt
《7对象和类PPT格式课件下载.ppt》由会员分享,可在线阅读,更多相关《7对象和类PPT格式课件下载.ppt(68页珍藏版)》请在冰豆网上搜索。
函数原型符号常量(用#define或const定义)结构声明类生明模板声明内联函数(普通函数定义不可)OOP通常的做法是一个头文件中放置类定义,另一个文件(源文件)放置类中方法的定义一个坐标转换的例子:
/coordin.h-structuretemplatesandfunctionprototypes/structuretemplates#ifndefCOORDIN_H_#defineCOORDIN_H_structpolardoubledistance;
/distancefromorigindoubleangle;
/directionfromorigin;
structrectdoublex;
/horizontaldistancefromorigindoubley;
/verticaldistancefromorigin;
/prototypespolarrect_to_polar(rectxypos);
voidshow_polar(polardapos);
#endif,/file1.cpp-exampleofathree-fileprogram#include#includecoordin.h/structuretemplates,functionprototypesusingnamespacestd;
intmain()rectrplace;
polarpplace;
coutrplace.xrplace.y)/slickuseofcinpplace=rect_to_polar(rplace);
show_polar(pplace);
coutNexttwonumbers(qtoquit):
;
coutBye!
n;
return0;
/file2.cpp-containsfunctionscalledinfile1.cpp#include#include#includecoordin.h/structuretemplates,functionprototypes/convertrectangulartopolarcoordinatespolarrect_to_polar(rectxypos)usingnamespacestd;
polaranswer;
answer.distance=sqrt(xypos.x*xypos.x+xypos.y*xypos.y);
answer.angle=std:
atan2(xypos.y,xypos.x);
returnanswer;
/returnsapolarstructure/showpolarcoordinates,convertingangletodegreesvoidshow_polar(polardapos)usingnamespacestd;
constdoubleRad_to_deg=57.29577951;
coutdistance=dapos.distance;
cout,angle=dapos.angle*Rad_to_deg;
coutdegreesn;
7.2类定义,类定义包含两部分类头(classhead,由关键字class及其后面的类名构成),类体(classbody,由一对花括号包围起来)。
类定义后面必须接一个分号或一列声明classScreen/*.*/;
classScreen/*.*/myScreen,yourScreen;
在类体中对类的数据成员和成员函数进行声明,并指定这些类成员的访问级别。
类体定义了类成员表,每个类定义引入一个不同的类类型,即使两个类类型具有完全相同的成员表,它们仍是不同的类型classFirstintmemi;
doublememd;
classSecondintmemi;
classFirstobj1;
Secondobj2=obj1;
/错误:
obj1和obj2类型不同,类体定义了一个域,在类体中的类成员声明把这些成员名字引入到它们的类域中可以以两种方式引用这种类类型1指定关键字class,后面紧跟类名classFirstobj1;
2只指定类名Secondobj2;
数据成员,类数据成员的声明方式同变量声明相同。
例如Screen类可以有下列数据成员#includeclassScreenstring_screen;
/string(_height*_width)string:
size_type_cursor;
/当前屏幕Screen位置short_height;
/行数short_width;
/列数;
数据成员_screen的类型是string_cursor是string数据成员的索引,它指向当前的Screen位置,类型是string:
size_type,数据成员可以是任意类型,如类数据成员可以是任意类型例如classStackScreeninttopStack;
void(*handler)();
/函数的指针vectorstack;
/类的vector;
也可以是静态数据成员(static)除了静态数据成员外,数据成员不能在类体中被显式地初始化,例如classFirstintmemi=0;
/错误doublememd=0.0;
/错误;
用户会希望在所定义类型的对象上执行各种各样的操作,这些操作可以用类成员函数来实现类的成员函数被声明在类体中classScreenpublic:
voidhome();
voidmove(int,int);
charget();
charget(int,int);
boolcheckRange(int,int);
/.;
成员函数,成员函数的定义也可以被放在类体内,如classScreenpublic:
/home()andget()的定义voidhome()_cursor=0;
charget()return_screen_cursor;
成员函数被声明在它的类中,该成员函数名在类域之外是不可见的,可以通过点.或箭头-成员访问操作符引用成员函数:
ptrScreen-home();
myScreen.home();
成员函数拥有访问该类的公有和私有成员的特权。
而一般来说普通函数只能访问类的公有成员成员函数可以是重载的函数,但是一个成员函数只能重载自己类的其他成员函数classScreenpublic:
/重载成员函数get()的声明charget()return_screen_cursor;
const成员函数constScreenblankScreen;
blankScreen.display();
/读类对象blankScreen.set(*);
修改类对象通过把成员函数声明为const以表明它不修改类对象const类对象只能调用被声明为const的成员函数修改类数据成员的函数声明为const是非法的一般来说,如果一个类的成员函数不修改类数据成员,就应该把那些声明为const成员函数,classScreenpublic:
boolisEqual(charch)const;
/.private:
string:
string_screen;
boolScreen:
isEqual(charch)constreturnch=_screen_cursor;
成员访问,信息隐藏是为了防止程序的函数直接访问类类型的内部表示而提供的一种形式化机制,类成员的访问限制是通过类体内被标记为public,private以及protected(访问限定符)来指定的公有成员publicmember,在程序的任何地方都可以被访问。
成员函数通常被指定为公有成员,它们定义了可以被一般程序用来操纵该类类型对象的操作,即类的公共接口。
但有些表示类的内部实现细节的成员函数可以例外,私有成员privatemember,只能被成员函数和类的友元访问。
类中的数据成员通常声明为private被保护成员protectedmember,对派生类就像public成员一样,对其他程序则表现得像private一个类可以包含多个访问限制区,每个区一直有效直到另一个区标签或类体的结束为止。
如果没有指定访问限定符,则缺省情况下在类体的开始左括号后面的区是private区,例子:
设计一个股票类型,考虑用一个对象表示某人所持的一种股票的情况:
所需操作:
获得股票增持卖出更新价格显示股票信息存储信息:
公司名称数量单股价格总价格,一般说来,定义一个类可以有两个步骤组成:
类结构定义和类方法定义。
#include#includeclassStock/classdeclarationprivate:
charcompany30;
intshares;
/数量doubleshare_val;
doubletotal_val;
voidset_tot()total_val=shares*share_val;
public:
voidacquire(constchar*co,intn,doublepr);
voidbuy(intnum,doubleprice);
voidsell(intnum,doubleprice);
voidupdate(doubleprice);
voidshow();
类设计应尽量把实现细节与公有接口分开公有接口表示设计的抽象组件。
将实现细节放在一起,并于抽象分开成为封装。
C+的类机制中有三种封装:
数据隐藏,将数据放在类的私有部分;
将实现细节放在私有部分将成员函数的定义与类结构定义放在不同文件中,实现细节:
类的成员函数使用作用于解析操作符:
类方法可以访问类的私有组件实现的代码见stock.cpp文件,成员函数说明,定义位于类声明中的函数自动成为内联函数。
所以set_tot()是个内联函数。
内联函数也可以使用如下方法定义:
classStock/classdeclarationprivate:
/voidset_tot();
/;
inlinevoidset_tot()total_val=shares*share_val;
可以通过显式地在类体中出现的函数声明上使用关键字inline,或者通过在类体外出现的函数定义上显式使用关键字inline,或