面向对象部分_第1页
面向对象部分_第2页
面向对象部分_第3页
面向对象部分_第4页
面向对象部分_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

1、面向对象部分面向对象部分 面向对象程序设计的基本特点面向对象程序设计的基本特点 () C+ 抽象:是指对具体问题进行概括 ,抽出一类对象的公共性 质 并加以描述的过程,分为数据抽象和行为抽象 就是将抽象得到的数据和行为相结合,形成一个统一体 继承:允许在原有类的基础上的,扩展新的特性,从而实 现代码重用 多态性:允许一段程序能够处理多种类型的对象的能力 模拟时钟的程序; 数据抽象: int hour,minute,second; 行为抽象: showTime(); setTime(int hour,int minute,int second); 对模拟时钟程序的封装 class Clock p

2、rivate: int hour,minute,second; public: showTime(); setTime(int hour,int minute,int second); ; 面向对象部分面向对象部分 类与结构类与结构 东南大学软件学院东南大学软件学院(苏州苏州 ) C+程序设计程序设计 1.类与结构 struct Clock int hour; int minute; int second; ; void showTime(Click void setTime volume(int hour,int minute,int second); int main() Clock cl

3、ock; /* . 相关执行代码 */ return 0; class Clock prvate: int hour; int minute; int second; public : void showTime(); void setTime(int hour,int minute,int second); ; int main() Clock clock; /* . 相关执行代码 */ return 0; 面向对象部分面向对象部分 二、深入理解类二、深入理解类 东南大学软件学院东南大学软件学院(苏州苏州 ) C+程序设计程序设计 C+中类的定义一般分为类的说明部分和类的实现部分。其中类说明

4、中类的定义一般分为类的说明部分和类的实现部分。其中类说明 的格式如下:的格式如下: class 类名类名 private: 私有数据和函数私有数据和函数 public: 公有数据和函数公有数据和函数 protected: 受保护数据和函数受保护数据和函数 ; class Clock prvate: int hour; int minute; int second; public : void showTime(); void setTime (int hour,int minute,int scond); ; 2.1类的声明 面向对象部分面向对象部分 2.1类的定义 void Clock:se

5、tTime(int h, int m, int s) hour=h; minute=m; second=s; void Clock:showTime() couthourminutesecond; 面向对象部分面向对象部分 东南大学软件学院东南大学软件学院(苏州苏州 ) C+程序设计程序设计 三、对象的创建和使用三、对象的创建和使用 2.3 对象的建立 成员的调用成员的调用 对象名对象名. 成员成员 #include using namespace std; class Clock ./类的声明略类的声明略 /.类的实现略类的实现略 int main() Clock myClock; myCl

6、ock.setTime(4,30,25); myClock.showTime(); 对象的声明对象的声明 类名类名 对象名对象名 #include using namespace std; class Clock ./类的声明略类的声明略 /.类的实现略类的实现略 int main() Clock myClock; 面向对象部分面向对象部分 面向对象部分面向对象部分 东南大学软件学院东南大学软件学院(苏州苏州 ) C+程序设计程序设计 2.4 类的成员 二、深入理解类二、深入理解类 class Clock public: void SetTime(int NewH, int NewM,int

7、NewS); void ShowTime(); private: int Hour, Minute, Second; ; 数据成员 函数成员 返回类型返回类型 函数名函数名(形参列表形参列表); 返回类型返回类型 类名类名:函数名函数名(形参列表形参列表) /函数体函数体 面向对象部分面向对象部分 东南大学软件学院东南大学软件学院(苏州苏州 ) C+程序设计程序设计 二、深入理解类二、深入理解类 2.5类的访问控制 面向对象部分面向对象部分 二、深入理解类二、深入理解类 面向对象部分面向对象部分 东南大学软件学院东南大学软件学院(苏州苏州 ) C+程序设计程序设计 三、对象的创建和使用三、对象

8、的创建和使用 3.3 对象的内存模型 数据区数据区 代码区代码区 对象对象1 数据区数据区 代码区代码区 对象对象 数据区数据区 代码区代码区 对象对象 数据区数据区 对象对象1 数据区数据区 对象对象 数据区数据区 函数和公共代码区函数和公共代码区 对象对象 n 面向对象部分面向对象部分 东南大学软件学院东南大学软件学院(苏州苏州 ) C+程序设计程序设计 三、对象的创建和使用三、对象的创建和使用 3.3 this指针 编辑类编辑类 class ClassA public: int id; int setID(int newID); ; int ClassA:setID(int newID)

9、 id = newID; 经过编译器编译后,展开的经过编译器编译后,展开的this指针指针 class ClassA public: int id; int setID(ClassA* this, int newID); ; int ClassA:setID(ClassA* this, int newID) this-id = newID; 任何成员函数调用时,都自动包含一个名为this的隐藏指针,他指向调用 函数时使用的对象。 面向对象部分面向对象部分 东南大学软件学院东南大学软件学院(苏州苏州 ) C+程序设计程序设计 定义一个类,要求其对象能够连续调用其成员函数 三、对象的创建和使用三、

10、对象的创建和使用 面向对象部分面向对象部分 东南大学软件学院东南大学软件学院(苏州苏州 ) C+程序设计程序设计 四、构造函数与析构函数四、构造函数与析构函数 4.1构造函数 构造函数的名称必须与类型完全相同 ,并且没有返回类型,即使定义为void类 型也是错误的。 用来初始化对象的数据成员,保证对 象在创建后数据成员已经被正确初始化, 可以被对象调用或被对象赋值 当对象声明或创建时,构造函数会自 动的调用,如果一个类用n个对象,构造 函数将被执行n次 class circle void circle(); ; class circle public: circle(); circle(dou

11、ble x,double x,double y); private: double x,y,r; ; class circle . ; Cirlce circle1; circle circle2(1.2,2.2,3.4); 面向对象部分面向对象部分 东南大学软件学院东南大学软件学院(苏州苏州 ) C+程序设计程序设计 三、对象的创建和使用三、对象的创建和使用 4.2 构造函数的重载 参数类型参数类型 参数个数参数个数 参数顺序参数顺序 class circle public: circle(); circle (double x,double y,double raduis); cirlce

12、 (double x,double y); private: double x; double y; double radiusl ; Cirlce circle1; Circle circle2(1.2,2.2,3.4); Circle circle3(2.3,3.4); 类的构造函数可以被重载以便 我们用多种不同的函数来初始化对象 但是必须保证每个函数的签名不同。 面向对象部分面向对象部分 东南大学软件学院东南大学软件学院(苏州苏州 ) C+程序设计程序设计 4.3 默认构造函数 四、构造函数与析构函数四、构造函数与析构函数 class circle public: circle(); c

13、ircle (double x,double y,double raduis); cirlce (double x,double y); private: double x; double y; double radiusl ; Cirlce circle1; Circle circle2(1.2,2.2,3.4); Circle circle3(2.3,3.4); 1.默认构造函数无形参 2. C+在某些情况下会提供默 认构造函数 3. 一个类不可能通知拥有多个默 认构造函数 面向对象部分面向对象部分 东南大学软件学院东南大学软件学院(苏州苏州 ) C+程序设计程序设计 四、构造函数与析构函

14、数四、构造函数与析构函数 4.4 复制构造函数 面向对象部分面向对象部分 东南大学软件学院东南大学软件学院(苏州苏州 ) C+程序设计程序设计 四、构造函数与析构函数四、构造函数与析构函数 面向对象部分面向对象部分 东南大学软件学院东南大学软件学院(苏州苏州 ) C+程序设计程序设计 2.3 类的内联函数成员 二、深入理解类二、深入理解类 int main() function(); body . function(); body . ; inline void function() body 在类将函数声明为内联函数 编译器以函数体代码代替内联函数的调用。 面向对象部分面向对象部分 隐方声明

15、隐方声明显示声明显示声明 class Clock public: void SetTime(int NewH, int NewM,int NewS); void ShowTime() coutHour“:”minute“:” Secondendl; private: int Hour, Minute, Second; ; class Clock public: void SetTime(int NewH, int NewM,int NewS); inline void ShowTime(); private: int Hour, Minute, Second; ; inline void Cl

16、ock:showTime() coutHour“:”minute“:” Secondendl; 东南大学软件学院东南大学软件学院(苏州苏州 ) C+程序设计程序设计 四、构造函数与析构函数四、构造函数与析构函数 2.3 类的内联函数成员 面向对象部分面向对象部分 东南大学软件学院东南大学软件学院(苏州苏州 ) C+程序设计程序设计 四、构造函数与析构函数四、构造函数与析构函数 4.4 析构函数 当一个对象定义时,C+自动调用构造函数建立该对象并进行初始化,那么当 一个对象的生命周期结束时,C+也会自动调用一个函数注销该对象并进行善后 工作,这个特殊的成员函数即析构函数 1. 构函数名也与类名相

17、同,但在前面加上字符. 2. 析构函数无函数返回类型,与构造函数在这方面是一样的,但析构函数不带任 何参数。 3. 一个类有一个也只有一个析构函数,这与构造函数不同。析构函数可以缺省。 4. 对象注销时,系统自动调用析构函数。 面向对象部分面向对象部分 东南大学软件学院东南大学软件学院(苏州苏州 ) C+程序设计程序设计 四、构造函数与析构函数四、构造函数与析构函数 4.5 析构函数执行的时机 对象类型对象类型构造函数调用构造函数调用析构函数调用析构函数调用 全局对象程序运行程序结束 局部对象对象定义处离开程序块 静态局部对象对象定义处程序结束 new动态创建的对象创建对象处delete显式撤

18、消 面向对象部分面向对象部分 东南大学软件学院东南大学软件学院(苏州苏州 ) C+程序设计程序设计 五、类的高级特性五、类的高级特性 5.1 类对象的数组 程序中可以声明类对象的数组,类对象的每个元素都将调用默认构造 函数。 面向对象部分面向对象部分 东南大学软件学院东南大学软件学院(苏州苏州 ) C+程序设计程序设计 5.2 类的复合 类的复合是软件重用的一种形式,是指在定义一个类时,把其他类 的对象作为自己的成员。 五、类的高级特性五、类的高级特性 组合类的构造函数调用的一般形式为: 类名:类名(形参):内嵌对象1(形参列表),内嵌对象2(形参列表) 类的组合描述的是在一个类中嵌入其他对象

19、作为成员的情况。他们 之间的关系是被包含的关系 面向对象部分面向对象部分 面向对象部分面向对象部分 五、类的高级特性五、类的高级特性 东南大学软件学院东南大学软件学院(苏州苏州 ) C+程序设计程序设计 5.3 类的const对象 类的类的const对象对象 声明:const 类名 对象名(形参列表) const Circle baseCirle(1.0,2.3) 类的类的const成员函数成员函数 声明:函数返回类型 函数名(形参列 表)const void area():const; const对象不能调用非const成员函数 const成员函数不能调用非const成员函数 const对象

20、允许被构造函数和析构函数修改 面向对象部分面向对象部分 友元函数与友元类友元函数与友元类 东南大学软件学院东南大学软件学院(苏州苏州 ) C+程序设计程序设计 1.友元的引入 #include using namespace std; class Point public: Point(int xx=0, int yy=0) X=xx; Y=yy; int GetX() return X; int GetY() return Y; private: int X,Y; ; int main() Point A(4,5); coutPoint A.GetX(),A.GetY(); Point 4,

21、5 如何设计一个函数求两点之间的距离? int main() Point a(4,5); Point b(7,8); distance(a,b); distance(Point Y=yy; distance(Point couta.y-b.yendl; int GetX() return X; int GetY() return Y; private: int X,Y; ; int main() Point a(4,5); Point b(6,7); Point c; c.distance(a,b); 面向对象部分面向对象部分 友元函数与友元类友元函数与友元类 东南大学软件学院东南大学软件学院

22、(苏州苏州 ) C+程序设计程序设计 2.友元的特点 友元是C+提供的一种允许外部类和 函数访问来的私有成员和受保护成员的方 法。 友元的正确使用能提高程序的运行效 率和程序的可读性,但破坏了类的封装性 和数据的隐蔽性. 在类中,可以用friend关键字,声明友 元,但是友元不是类的组成部分。 面向对象部分面向对象部分 友元函数与友元类友元函数与友元类 东南大学软件学院东南大学软件学院(苏州苏州 ) C+程序设计程序设计 3.友元函数 friend 返回值类型函数名(参数表); 返回值类型函数名(参数表) /函数体 #include using namespace std; class Poi

23、nt public: Point(i) ; int GetX() ; int GetY() ; friend double distance(Point *a,Point ; 面向对象部分面向对象部分 友元函数与友元类友元函数与友元类 东南大学软件学院东南大学软件学院(苏州苏州 ) C+程序设计程序设计 #include #include using namespace std; class Point /Point类声明类声明 public: /外部接口外部接口 Point(int xx=0, int yy=0) X=xx;Y=yy; int GetX() return X; int Get

24、Y() return Y; friend float Distance(Point private: /私有数据成员私有数据成员 int X,Y; ; double Distance( Point double dy=a.Y-b.Y; return sqrt(dx*dx+dy*dy); int main() Point p1(3.0, 5.0), p2(4.0, 6.0); double d=Distance(p1, p2); coutThe distance is dendl; return 0; 使用友元函数计算两点之间的距离 面向对象部分面向对象部分 友元函数与友元类友元函数与友元类 东

25、南大学软件学院东南大学软件学院(苏州苏州 ) C+程序设计程序设计 4.友元类 class A friend class B; /声明声明B为为A的友元类的友元类 ; class A friend class B; public: void Display() coutxendl; private: int x; class B public: void Set(int i); void Display(); private: A a; ; void B:Set(int i) a.x=i; void B:Display() a.Display(); 面向对象部分面向对象部分 友元函数与友元类友

26、元函数与友元类 东南大学软件学院东南大学软件学院(苏州苏州 ) C+程序设计程序设计 4.友元类的性质 友元关系不可传递友元关系不可传递1 友元关系的单向性友元关系的单向性3 友元关系的不可继承性友元关系的不可继承性4 class A friend class B; /声明声明B为为A的友元类的友元类 ; class B friend class C; /声明声明C为为B的友元类的友元类 ; class A friend class B; /声明声明B为为A的友元类的友元类 ; class C:class A ; 面向对象部分面向对象部分 类的静态成员类的静态成员 东南大学软件学院东南大学软件

27、学院(苏州苏州 ) C+程序设计程序设计 1.静态成员引入原因 Why ? 函数内部定义的变量, 会因对象的建立和销毁 频繁的建立和释放相应 的内存空间。 全局变量破坏了类的封 装性,违反了面向对象 程序设计的基本原则。 面向对象部分面向对象部分 类的静态成员类的静态成员 东南大学软件学院东南大学软件学院(苏州苏州 ) C+程序设计程序设计 2.静态成员的优势 class Box public: static int objectCount; . private: double length; double width; double height; ; 类定义 length width he

28、ight length width height length width height objectCount 对象1 对象2对象3 每个静态数据成员的副本在类的所有对象之间共享每个静态数据成员的副本在类的所有对象之间共享 面向对象部分面向对象部分 类的静态成员类的静态成员 东南大学软件学院东南大学软件学院(苏州苏州 ) C+程序设计程序设计 3.静态成员的内部机制 内存空间分配的时机:程序编译时 静态成员初始化位置: 为类的外部接口的头文件,那里有类声明 类定义的内部实现,那里有成员函数定义 程序的main()函数前的全局数据声明和定义处 面向对象部分面向对象部分 类的静态成员类的静态成员

29、 东南大学软件学院东南大学软件学院(苏州苏州 ) C+程序设计程序设计 4.类的静态数据成员 声明 static static 类型说明符类型说明符 成员名成员名 赋值 : = 引用 class Box public: int volume( ); private: static int height; int width; int length; ; class Box public: int volume( ); private: static int height; int width; int length; ; int Box:height=2; 类名:数据成员名类名:数据成员名 c

30、lass Box public: int volume( ); private: static int height; int width; int length; ; int Box:height=2; int main() coutBox heightendl; 对象名:数据成员名对象名:数据成员名 面向对象部分面向对象部分 类的静态成员类的静态成员 东南大学软件学院东南大学软件学院(苏州苏州 ) C+程序设计程序设计 #include using namespace std; class Box public: Box(int,int); int volume( ); static in

31、t height; /把height定义为公用的静态的数据 成员 Private: int width; int length; ; Box Box(int w,int len) /通过构造函数对width和length赋 初值 width=w; length=len; int Box volume( ) return(height*width*length); int Box height=10; /对静态数据成员height初始化 int main( ) Box a(15,20),b(20,30); couta.heightendl; /通过对象名a引用静态数据成员 coutb.heigh

32、tendl; /通过对象名b引用静态数据成员 coutBox heightendl; /通过类名引用静态数据成员 couta.volume( )“ ”b.volume() endl; /调用volume函数,输出计算体积 4.类的静态数据成员 10 10 10 3000 6000 面向对象部分面向对象部分 类的静态成员类的静态成员 东南大学软件学院东南大学软件学院(苏州苏州 ) C+程序设计程序设计 5.类的静态函数成员 成员函数也可以定义为静态的,在类中声明函数的前面加static就成了 静态成员函数。如 static int volume( ); 和静态数据成员一样,静态成员函数是类的一部分,而不是对象的 一部分。如果要在类外调用公用的静态成员函数,要用类名和域运算符 “ ”。如 :Box volume( ); 静态成员函数的作用不是为了对象之间的沟通,而是为了能处理静态 数据成员。 在C+程序中,静态成员函数主要用来访问静态数据成员, 而不访问非静态成员。 如果一定要引用本类的非静态成员,应该加对象名和成员运算符“.”。 如 couta.widthen

温馨提示

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

评论

0/150

提交评论