当前位置:文档之家› C++教程第07章 类与对象-7 类之间的对象关系 对

C++教程第07章 类与对象-7 类之间的对象关系 对

C++教程第07章 类与对象-7 类之间的对象关系 对
C++教程第07章 类与对象-7 类之间的对象关系 对

7章类与对象

7.1 类和对象(定义及使用)初步

7.2成员函数的重载

7.3 对象的初始化、构造函数与析构函数

7. 4 类的定义及其使用

7. 5 类的静态成员及常量成员

7. 6 友元

7. 7 类之间的对象关系对象成员和嵌套

7. 7.1 对象成员

对象成员:定义一个新类时,把一个已定义类的对象作为该类的成员,称为对象成员。

对于含有对象成员的对象,在对该对象进行初始化之前,首先要对该对象中对象成员进行初始化,这要通过调用对象成员的构造函数来实现。当类中含有对象成员时,通常采用“初始化成员列表”的方法向对象成员的构造函数传递实参。

初始化成员列表的一般格式:

<类名>(参数表0) :c1(参数表1)〈〈,c2(参数表2),c3(参数表3)---cn(参数表n)〉〉{ - - - } //构造函数体

1、冒号后面的部分成为初始化成员列表;

2、c1、--- 、cn即可以为对象成员名,也可以为基本数据类型的成员数据。

1)当c1、--- 、cn为对象成员时,其后的参数表为向对象成员所在类的构造函数所提供的参数(实参),这些参数(实参)是由<参数表0>中的参数与其他常量或有确定值的变量一起组成的表达式。

如:在对对象成员ck进行初始化时,根据<参数表k>中的参数的个数和类型确定所要调用的构造函数版本。

如果某个对象成员没有出现在初始化成员列表中,则初始化该成员时,调用其所在类中的具有默认参数的构造函数。

2)当c1、--- 、cn为基本数据类型的成员时,则其后的<参数表>为该成员的初始值。

但如果在构造函数体中又对该成员数据设置初始值,则构造函数体中的值为最终值。注意:只能使用初始化成员列表的方法初始化const成员数据,如果改用构造函数将出错。3)类中定义的对象成员与在类外的定义对象不同,后者意味着对象创建;类中的对象成员说明并不直接与对象的创建和初始化相联系,要等所在的类的对象被创建时(通过构造函数)一同被创建。

3.对对象成员初始化的顺序取决于这些对象成员在类中说明的顺序,即先说明先调用,与它们在成员化列表中的顺序无关。

4.在创建具有对象成员的类的对象时,先按对象成员的先后次序调用各个对象成员的构造函数,然后才调用这个类本身的构造函数。

5.析构函数的调用顺序与构造函数相反。

7. 7.2 对象成员举例

例1:分析程序的输出结果

# include

class A

{ int x ,y ;

public:

A ( ) { }

A(int a , int b)

{ x=a ; y=b ;cout<<“调用类A的构造函数!”<

void show ( )

{ cout<<”x=”<

~ A( ){cout<<”调用类A析构函数!“<

};

class B

{ int Length , width ;

public :

B( ) { }

B( int a , int b)

{ Length = a ; Width = b ; cout<<”调用了类B的构造函数!”<

void show ( )

{ cout <<”Length=”<

~ B ( ) {cout<<”调用类B的析构函数!\n “ ; }

};

class C

{ int r , High ;

A al ;//D

B b1 ;//E

public :

C(int a , int b ,int c ,int d ) :a1 (c,d) ,b1(500 ,600) //F

{ r=a ; High=b ;

cout<<”调用了类C的构造函数!” <

}

void show ( )

{ cout<<”r=”<

al.show ( ) ;//注意:a1.show必须是公有成员函数,若是私有的,则错误。

b1.show( ) ;//同理

}

~ c ( ) {cout<<”调用类C的析构函数!\n “ ;}

} ;

void main (void )

{ C c1 (100 ,200 , 300 ,400) ; //G

c1.show ( ) ;

}

运行该程序,输出结果为:

调用了类A的构造函数!

调用了类B的构造函数!

调用了类C的构造函数!

r=100 High =200

x=300 y=400

Length=500 width = 600

调用C的析构函数!

调用B的析构函数!

调用A的析构函数!

例2 利用成员函数设置对象成员中的成员数据

#include

class CArea

{ int x , y ;

public :

void set (int i , int j )

{ x=i ;y=j ;}

int get ( ) {return x*y ;}

} ;

class Volume

{ int high ;

CArea s1 ;

public :

void set ( int i , int j , int k )

{ hight=k ;

s1.set (i , j ) ; //通过成员s1中的公有成员函数设置s1中的成员数据

//注意:s1.set (i , j )必须公有的。

}

int get( ) {return high*s1.get( ) ;}

void print ( )

{ cout<<”该面积=”<

cout<<”该体积=“<

}

} ;

void main (void)

{ Volume v1 ;//注意:CArea类必须没有构造函数,构造函数参数为空. 否则出错.

//A对该对象成员s1初始化调用的是类CArea的初始化函数

v1.set(20 ,10 ,30) ;

v1.print() ;

}

运行结果:

该面积=200

该体积=6000

例p233

z7p233L

#include

#include

class pixel

{ int x,y;

public:

pixel( ) {x=0; y=0; }

pixel(int x0, int y0)

{x=x0; y=y0;}

pixel(pixel& p){x=p.x; y=p.y; }

int getx(){return x;}

int gety(){return y; }

};

class line

{ pixel start,end;

int color;

public:

line(int sx, int sy, int ex, int ey, int col):start(sx,sy),end(ex,ey)

//创建类line对象的构造函数要负责一同创建出所包含的对象成员start与end {color=col; }

line(pixel p1, pixel p2, int col):start(p1),end(p2)

{color=col; }

line( ):start(0,0),end(8,0)

{color=0; }

int getCol( )

{ return color;}

double getLen( )

{ double xd=end. getx()-start. getx();

double yd= end. gety()-start. gety();

double len=sqr(yd*yd+xd*xd);

return len;

}

};

void main() {

pixel p1(0,0), p2(10,10), p3(p2);

line ln1(1,1,2,2,1001);

line ln2(p1,p2,2002);

line ln3(p3,p2,3003);

line ln4;

//输出各对象的“长度”及“颜色”值

cout<<"ln1.getLen()="<

类与对象答案

类与对象 知识要点 1.掌握类与对象的概念和定义方法,掌握类成员的访问属性。 2.掌握构造函数的概念、定义方法和使用方法。 3.掌握析构函数的概念、定义方法和使用方法。 4.掌握拷贝构造函数的概念、定义方法和使用方法。 5.掌握包含对象成员的类构造函数的定义方法。 6.掌握静态成员的概念、定义方法、作用和特点。 7.掌握友元的概念、定义方法、作用和特点。 8.掌握类模板的定义格式与使用方法。 典型例题分析与解答 例题1:下列有关类的说法不正确的是()。 A.对象是类的一个实例 B.任何一个对象只能属于一个具体的类 C.一个类只能有一个对象 D.类与对象的关系和数据类型与变量的关系相似 答案:C 分析:对象是类的一个实例,类与对象的关系和数据与变量的关系相似,所以一个类可以有多个对象。 例题2:下面()项是对构造函数和析构函数的正确定义。 A.void X::X(), void X::~X() B.X::X(参数), X::~X() C.X::X(参数), X::~X(参数) D.void X::X(参数), void X::~X(参数) 答案:B 分析构造函数无返回类型、可带参数、可重载;析构函数无返回类型、不可带参数、不可重载。 例题3:()的功能是对象进行初始化。 A.析构函数 B. 数据成员 C.构造函数 D.静态成员函数 答案:C 分析:当一个对象定义时,C++编译系统自动调用构造函数建立该对象并进行初始化;当一个对象的生命周期结束时,C++编译系统自动调用析构函数注销该对象并进行善后工作; 例题4:下列表达方式正确的是()。 A.class P{ B. class P{ public: public: int x=15; int x; void show(){cout<

《面向对象程序设计cpp》课程设计指导书

《面向对象程序设计》课程设计指导书

一、课程设计目的 通过本课程设计,培养上机动手能力,使学生巩固《面向对象程序设计》课程学习的内容,掌握工程软件设计的基本方法,强化上机动手能力,闯过编程关。 二、课程设计题目 0、人事管理系统 1、物业管理系统 2、客房管理系统 3、学生管理系统 4、民航订票系统 5、商场销售管理系统 6、通讯录 7、图书馆管理系统 8、商场(工厂)库存管理系统 9、“一二九”合唱评委打分系统 学生课设选题根据学号的尾数确定。(例学号为17号的学生做7号题目) 三、课程设计任务 1、任务:在两周内独立正确完成至少1道题目。 2、学生完成课设后,向指导老师提出答辩申请。答辩时要检查的内容为: (1) 课程设计纸质文档; (2) 课程设计源代码及其运行结果; (3) 老师提出相关问题,学生对问题进行作答。 3、时间: 指导:第十六,十七周。 答辩时间:第十七周 四、课程设计考核方式 课程设计成绩评定的依据有设计文档资料、具体实现设计方案的程序及课程设计考勤登记表,其中平时成绩占总成绩的30%。

优(90分以上):按要求完成,有完整的符合标准的文档,文档有条理、文笔通顺,格式正确,其中有总体设计思想的论述,有正确的流程图,程序完全实现设计方案,设计方案先进,软件可靠性好,能很好的回答老师所提出的问题; 良(80 - 90分):按要求完成,有完整的符合标准的文档,文档有条理、文笔通顺,格式正确;有完全实现设计方案的软件,设计方案较先进,能较好的回答老师所提出的问题; 中(70 - 80分):按要求完成,有完整的符合标准的文档,有基本实现设计方案的软件,设计方案正确,能基本回答老师所提出的问题; 及格(60 - 70分):按要求完成,有完整的符合标准的文档,有基本实现设计方案的软件,但不能完全运行,设计方案基本正确,不能完全回答老师所提出的问题; 不及格(60分以下):不能完成程序,没有完整的符合标准的文档,软件没有基本实现设计方案,设计方案不正确,不能回答老师所提出的问题。 五、提交的资料 1、软件 软件需提供源程序,并能正常运行。 注:对于程序中未能实现的部分需要加以说明。 对于程序中所参考的部分代码需要加以声明,并说明出处。 2、文档 (1)设计文档的格式尽量按照《中华人民共和国国家标准UDC 681. 3计算机软件产品开发文件编制指南GB 8567-88》的标准书写。 (2)内容(以下仅提供参考) 1、需求分析; 2、类设计及说明; 3、定义的函数主要功能说明; 4、主要算法说明:举例说明1、2个比较有特点的算法; 5、系统总框图; 6、存在的问题与不足及对策;

面向对象程序设计课程设计指导

面向对象程序设计课程设计》 指导书 2 周) 适用专业:苏州理工学院计算机科学与技术专业 江苏科技大学苏州理工学院 2018年8 月

课程设计目的 《面向对象程序设计课程设计》的目的是通过综合性程序设计训练,使学生进一步巩固对计算机程序设计语言 (C++) 基本语法、基本算法的理解,加深对面向对象程序设计的理解,并将课本上的理论知识的实际应用有机的结合起来,锻炼学生的分析问题、解决问题的能力,为学习后续课程和实际编程打下良好的基础。 二、课程设计要求 利用所学的面向对象程序设计的编程知识和技巧,独立完成具有一定难度的程序设计题,养成良好的编程习惯,掌握基本程序设计的理念、方法,熟练运用程序调试的技巧,提高基本的程序开发能力。 1.学生必须独立完成本指导书中附录一中的所有编程题。 2.遵守机房管理制度和实验操作规则 3.上机者在上机规定的时间内,不得从事与本课程设计无关的内容 4.独立完成课题,严禁抄袭他人成果 5.按时提交报告 三、时间安排 2018年9月2日~2018年9月 13日。 四、实验设备和开发工具 1.计算机 计算机应具有较好的性能和稳定性。 2.操作系统 操作系统采用 Windows 2000 、 Windows XP 、 Windows 2003 server 等。 3.开发工具 VC 五、考核要求 1.上机考核:在规定的时间内完成 1~2 题进行编程,占总成绩的 60% 。 2.课程设计报告:选附录中的一半题写成报告,格式要求见附录二,占总成绩的 20%。 3.平时表现:占总成绩的 20。 附录一:课程设计内容 【排序、数组操作】 1.[题目]对一个 5 位数的任意整数,求出其降序数。例如:整数是 82319,则其降序 数是 98321。算法提示:将整数的各位数分解到一维整型数组 a 中,再将 a 数组中的元素按

面向对象程序设计课程设计报告《电子时钟》C

目录

1 前言 时钟在人们日常生活中必不可少,时钟的原理是怎么样的呢,本程序将模拟一个电子时钟。为了使程序更加美观,本程序是使用Visual C++编写一个可视化的模拟电子时钟程序。电子时钟的关键在于延时,为了达到延时的准确性,不受程序执行时间的影响,采用了系统两秒之间的间隔进行延时。该程序还加入了显示星期功能,在知道1901年每月1号是星期几的情况下,再根据年、月、日即可算出星期几。 2需求分析 要求 设计类结构,模拟电子时钟的行走,在屏幕上显示一个活动时钟。 任务 (1)显示日期的格式:XXXX年XX月XX日 (2)显示时间的格式:XX:XX:XX。 (3)添加显示星期的格式:星期X 运行环境 (1)WINDOWS2000/XP系统 (2)Visual C++ 编译环境或DEV C++ 编译环境 开发工具 C++语言 3分析和设计 + 系统分析及设计思路 为了使程序的显示更加美观,该程序使用了C++可视化程序设计方法进行设计。在可视化程序设计中,建立了一个MFC单文档应用程序工程,该工程包括了视图类、文档类对话框类和主框架类。在主框架类中修改窗口等属性,使整个时间的

显示更加协调。模拟电子时钟是一个显示和计时的小程序,因此只要在视图类和文档类添加相关的属性和方法即可完成模拟电子时钟的功能。 文档类定义时钟的相关属性,包括int类型的year、month、day、hour、minute、second,和包括CString类型的str_year、str_month、str_day、str_hour、str_minute、str_second等信息。int类型的时间日期属性用以计算,CSrting类型的时间日期属性用以显示,通过CString类中的成员函数Formart可以把int型的数据转成CString型的。 视图类实现时钟的主要功能,在该类的OnDraw函数里面对时间日期进行显示输出。向窗口输出信息时,为了保证高刷新率下绘图不闪烁,使用内存绘图的方法,在内存中创建一个与屏幕绘图区域一致的对象,使得重绘视图时可以大大提高运行速度。为了使计时能够达到几乎无误差,使用了一个获取系统两秒间隔作为计时间隔的方法,使得计时间隔和系统时间间隔一致。每次重绘视图的时候都重新获取系统时间,当该两次获得的秒不一致时,就对时间加一秒。通过一个计时器消息,使视图50ms刷新一次,以保证时间的准确性。 在视图类中需要添加几个方法:用于计算时间的方法RunTime()、计算星期的方法Week()、int型转CString型的方法Change()、获取系统时间的方法GetDateTime()、重获系统时间方法OnReset()和计时器消息。 在计算时间日期的时候,每达到1秒的时候对second进行加1,然后判断是否达到60秒,达到的话minute就加1,同样的方法对hour、day、month和year进行计算,在对day计数时,考虑到大小月和闰年,对day进行加1时,判断是哪一月和是否为闰年。在确定年、月、日之后,使用函数Week()进行对星期几的计算,根据1901年每月1号是星期几可以得出现在是星期几。 在这个程序中,还使用了一个对话框类,使用对话框来对时间日期的设置。在菜单栏里添加一个“设置时间”的选项和一个菜单消息,当点击这个选项就会弹出设置时间日期的对话框,对话框中编辑控件设定了每个值的取值范围,从而对输入错误进行排除。 主要类图 图主要类图

相关主题
文本预览
相关文档 最新文档