c++讲义(4)类与对象的定义.ppt_第1页
c++讲义(4)类与对象的定义.ppt_第2页
c++讲义(4)类与对象的定义.ppt_第3页
c++讲义(4)类与对象的定义.ppt_第4页
c++讲义(4)类与对象的定义.ppt_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

1、第4讲 类与对象的定义,1、类的定义(P101) 2、对象的定义(P105) 3、实例(栈),问题引入:C语言中的结构体 #include struct date int year, month , day; ; void main( ) struct date d1; d1.year=1999; d1.month=12; d1.day=31; coutd1.year/d1.month /d1.dayendl;,分析:结构体变量d1有三个成员,主函数main可以直接使用d1的三个成员。即:结构体类型没有封装功能。 而面向对象的程序设计的一个重要特征就是封装性,采用类可以实现数据的封装。,1、什

2、么是类? 类是对具有相同数据和方法的一组对象的定义或描述。(类的描述中包含数据与对数据操作方法的定义) 一个类的所有对象都有相同的数据结构,并且共享实现操作的代码。 2、什么是对象? 对象是类的一个实例,因此在定义了类之后,利用类来创建该类的对象。 3、类和对象的关系 类是一种新的数据类型,对象是这种类型的变量。,一、基本概念,二、类的声明(P102),1、类的声明格式 class private: ; protected: ; public: ; ; ; 考虑:如何定义一个表示日期的类,#include class TDate private : int year, month, day;

3、public : void SetDate(int y, int m, int d); void Print () /输出日期函数 cout year / month / day endl; ; void TDate:SetDate(int y, int m, int d) year=y; month=m; day=d; /设置日期函数 说明:函数SetDate的实现放在外面,而函数Print的实现放在类的定义中间。,2、在每个类的定义中: class是定义类的关键字。 是一个标识符,用于标识一个类 大括号内是类的说明部分,说明该类的成员。 从内容上来看:类的成员分数据成员和函数成员两种。从访

4、问性来看:类的成员分为私有成员(private)、公有成员(public)和保护成员(protected)三种。 public、private和protected的出现次数与次序可以任意,如果没有指定,访问性隐含为private,用关键字private定义的成员构成类的内部状态,public的成员则构成与外界通信的接口,通过public的成员函数来使用private的数据成员,从而在C+中实现了封装。 3、注意(P104) 在类的定义中不允许对其数据成员初始化 将函数的实现类定义的大括号内,该成员函数隐含为内联(内嵌)函数;如果将内联函数的实现写在大括号外面,则应在函数名前加上inline,三

5、、对象的定义(P104),1、对象的定义格式: 类名 变量名表;或 类名 对象名; 如:前面已定义了类TDate 则:TDate d1,d2; 定义2个对象d1和d2 对象是属于类的变量,每个对象占用各自的存储单元,每个对象各自具有了该类的一套数据成员(静态成员除外),2、访问对象成员的方法: 访问对象的成员包括数据成员和成员函数,其访问格式是: 对象名.成员名,如前面的例中,对应的主函数如下: void main( ) TDate d1; /定义对象变量 d1.SetDate (2004,10,8); /调用成员函数设置d1的日期为2004年10月8日 d1.Print( ); /调用成员函

6、数显示d1的日期 ,程序设计示例:复数类(参考P102) 复数类Complex的属性有: real:实部,代表复数的实数部分; image:虚部,代表复数的虚数部分。 复数类Complex的方法有: get_real( ):获得复数对象的实部。 get_image():获得复数对象的虚部。 set_real(double d):将当前复数对象的实部设置为给定的形式参数的值。 set_image(double d):将当前复数对象的虚部设置为给定的形式参数的数值。 disp(Complex c):用数学方式显示复数,例如实部为3,虚部为5,则显示:3+5i,3、类成员的访问控制与作用域(P103

7、) 类的作用域就是在程序中,类的成员说明起作用的区域。它是由类说明时左右花括号中的内容和类的成员函数的作用域组成。 类作用域介于函数作用域与文件作用域之间。 私有成员与保护成员局限于类的作用域;公有成员的作用域可以是整个文件,但在类作用域之外要使用对象名或指向对象的指针名来修饰,即: 对象名.成员名 指向对象的指针名- 成员名 (*指向对象的指针名).成员名 参考下面的程序:,#include class test private: int x; public: int y; int getx(); ; int test:getx() return x; int f() return x; /

8、错误 void main() test t; coutt.xendl; /错误 coutt.yendl; ,修改下面程序中的错误: #include class TDate private : int year, month, day; public : void SetDate(int y, int m, int d) year=y; month=m; day=d; ; void main() TDate d1; d1.SetDate(2004,10,8); cout d1.year /d1.month / d1.day endl; /使用了类的私有成员year、month、day ,将程序

9、改为: #include class TDate private : int year, month, day; public : int yy() return year; int mm() return month; int dd() return day; void SetDate(int y, int m, int d) year=y; month=m; day=d; ;,void main() TDate d1; d1.SetDate(2004,10,8); cout d1.yy() /d1.mm() / d1.dd() endl; /调用成员函数 /修改原因: year、month

10、和day都是类的私有成员,所以不能在main函数中使用;在类中定义的公有成员函数yy( )、mm( )和dd( )后,就可以在main函数中访问它的私有成员了。,三、实例-栈 1、问题:将数据结构中的顺序栈定义成类的形式,通过栈来实现进制转换。 2、类的定义 数据成员:存放元素的数组(例如: x) 栈顶标志(例如: top) 成员函数:栈的初始化(例如: init) 入栈(例如: push) 出栈(例如: pop) 判断栈空(例如: isempty) 3、对象定义:定义一个栈对象,利用该对象中的数据成员来存放进制转换过程中的各个数字;利用栈的成员函数来实现相应的操作。,4、主函数 从键盘输入一

11、个十进制数,输出对应的八进制。 5、程序说明 为了简化问题,只考虑将十进制转换为八进制,栈类中没有考虑栈满的情况 6、程序组织 (P144) 方法1:将所有语句写到一个文件中。 方法2:文件stack.h是栈的定义,文件stack1.cpp是栈的成员函数实现,文件stack2.cpp使用栈进行数制转换。 方法3:将栈的定义和栈的成员函数实现存入C+头文件stack.h中,程序文件stack2.cpp使用栈进行数制转换。,7、源程序文件: 下面是按方法二来组织的三个文件: /文件stack.h class stack private: int x10; int top; public: void

12、 init() ; void push(int); int pop(); int is_empty(); ;,/文件stack1.cpp #include stack.h void stack:init( ) /初始化堆栈 top=0; int stack:is_empty( ) /判断堆栈是否空,空=1 if (top=0) return 1; else return 0; void stack:push(int n) /将n压入堆栈 xtop=n;top+; int stack:pop( ) /弹出栈顶元素 top-; return xtop; ,/文件stack2.cpp #include #include stack.h void main() int n; stack s; /定义栈对象变量 coutn; s.init(); /初始化堆栈 while (n) s.push(n%8); /将当前的末位数字入栈 n=n/8; while (

温馨提示

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

评论

0/150

提交评论