大一各专业汇总电气第9章类和对象_第1页
大一各专业汇总电气第9章类和对象_第2页
大一各专业汇总电气第9章类和对象_第3页
大一各专业汇总电气第9章类和对象_第4页
大一各专业汇总电气第9章类和对象_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

第9章类和对象9.1面向对象程序设计方法简介面向过程的设计方法某客户去银行取钱,其步骤为:1、输入密码2、验证密码,通过转入步骤3,否则返回步骤13、输入取款金额4、如果取款金额小于余额,转入步骤5,否则返回步骤35、取款6、重置账户余额7、退出银行系统面向过程的设计方法将上面每个步骤用函数实现,取款的一系列操

作就算完成了。但是,如果现在客户需要存钱、开户或者销户,上面的程序就不太合适了,必

须调整某些步骤操作或者步骤的顺序,如果是

大型的程序,这种调整量是非常大的。面向过程的设计方法面向过程的程序设计方法以算法为核心,把数据和函数作为相互独立的部分,通过函数操作数据。但数据和函数的分离往往会导致它们的不同步,如果数据结构发生变化,但函数没有作相应的修改,函数操作数据就有可能出错。面向过程的程序设计技术忽略了数据和操作之间的内在联系,程序的稳定性、可重用性、可维护性较差。面向对象的设计方法面向对象是把构成问题事物分解成各个对象,

建立对象的目的不是为了完成一个步骤,而是

为了描叙某个事物在整个解决问题的步骤中的

行为。比如,取钱就可以分成客户对象和银行

对象,其中客户负责输入密码、输入取款金额

等操作,银行负责验证密码、重置客户账户余

额等操作,这两个对象即相互独立又相互关联。可见,面向对象是以功能而不是以步骤来划分

问题的。面向对象的设计方法实际上,用计算机解决的问题都是现实世界中的问题,这些问题无非由一些相互间存在一定联系的事物所组成。每个具体的事物都具有行为和属性两方面的特征。因此,把描述事物静态属性的数据结构和表示事物动态行为的操作放在一起构成一个整体(类),才能完整、自然地表示客观世界中的实体(对象)。面向对象的程序设计技术就是以设计类为核心,通过对象的行为操作对象的数据。9.2

类和对象的基本概念我们的周围是一个真实的世界,不论在何处,

我们所见到的东西都可以看成是对象。每个对

象都有属性。例如,一部电话有一定的颜色和

大小。当把一部电话放在办公室中,它又有了

一定的位置,而它的听筒也有拿起和挂上两种

状态。对象还有行为,如拿起听筒拨电话号码。在C++中,我们用类来描述对象。类是一个数据类型,它定义的是一种对象类型,由数据和方法组成,描述了属于该类型的所有对象的性质。类和对象关系密切,但并不相同。类包含了有关对象的特征和行为信息,它是对象的蓝图和框架。例如,电话的电路结构和设计布局可以是一个类,而这个类的实例---对象,便是一部电话。所以说,类是抽象的,对象是具体的。9.2.1

结构体的回顾有一个Person结构体,定义如下:struct

Person{char

name[10]; //姓名//性别//年龄bool

sex;intage;float

pay;//薪水};该Person结构体包含了某类人的基本信息。如果将struct换成class,此结构体就变成了一个Person类。9.2.2

类的定义定义一个类的一般形式如下:class<类名>{类成员;};类成员必须用一对花括号括起来,并且类的定义必须以分号结束。9.2.2

类的定义类的成员有三种不同的访问权限:public:公有成员,在类外可以通过对象直接访问该成员。private:私有成员,只能在本类内访问该成员。protected:保护成员,可以在本类内或派生类内访问该成员。9.2.2

类的定义类的定义可以细化为:class<类名>{private:私有成员;protected:保护成员;public:公有成员;};9.2.2

类的定义要注意的是:如果没有指定类成员的访问权限,则该成员的默认访问权限为private。类中的任何成员均不能使用关键字extern、auto以及register等(static除外)来限定其存储类型。类中的成员具有类作用域,即类中的成员的有效范围为整个类体,它们只能供类中的成员访问,外部环境不能直接访问类的成员。可以通过对象访问类的成员。9.2.3

对象的定义及成员的引用类是一种自定义数据类型,要在类外访问类成

员需要定义类变量,我们称这种类变量为对象。说明对象的一般格式为:《存储类型》类名对象名对象只能访问公有成员。其一般格式为:<对象名>.<公有数据成员名>;或<对象名>.<公有成员函数名>(<参数表>);例9.1对象的定义及成员的引用//A

公有访问权限//B

圆的半径//圆的面积class

Circle{public:double

radius;double

area;};void

main(){Circle

circle;circle.radius=1.0;//定义对象circle//C

将半径置为1.0circle.area=3.14*circle.radius*circle.radius;

//计算面积

cout<<circle.area<<endl;}9.3

类的成员函数9.3.1

成员函数的声明与定义类的成员函数能够直接访问所在类中定义的所

有数据成员和成员函数,其使用表示也是抽象

的,因为并没有把它们与具体的对象联系起来。成员函数的声明与普通函数的声明一样,但定

义可以出现在类体中,也可以出现在类外。例9.2成员函数的声明与定义#definePI

3.14class

Circle{//私有成员//设置半径//计算面积//A

函数原型//B

在类外定义private:doubleradius;doublearea;public:void

SetRadius(double

_radius){radius=_radius;}void

CalcArea(){area=PI*radius*radius;}void

Show();};void

Circle::Show(){cout<<"Radius="<<radius<<"\t

Area="<<area<<endl;}void

main(){Circlecircle;circle.SetRadius(1.0);circle.CalcArea();circle.Show();}9.3.1

成员函数的声明与定义成员函数的定义如果放在类外(如行B),其函数名左边必须加上所属类名及域运算符,同时必须在类体中对该函数进行原型声明(如行

A)。

需要知道的是,成员函数在内部定义,默认为inline函数;若在外部定义,缺省为非内联函数,要想声明为内联函数则需在定义前加

inline。9.3.2

通过指向对象的指针访问成员函数用指针访问对象中的成员(公有成员函数或数据成员)的方法与通过指向结构体变量的指针引用结构体中的

成员类似voidmain(){Circle

circle,*p=&circle;p->SetRadius(1.0);p->CalcArea();p->Show();}9.3.3

成员函数的其它特性在创建对象时,编译系统只为对象中的数据成员分配存储空间,而同类对象的成员函数的代码却是共享的,即将类的成员函数的代码存放在一个公用区。因此,创建一个对象时为该对象分配的存储空间为它的数据成员所占用的存储空间的总和。成员函数遵循一般函数的规则,可重载,参数也可选。例9.3

成员函数的重载//Aclass

Text{private:intX,Y;public:void

Set(int

x=5);void

Set(int

x,int

y);int

Add();int

Add(int

x);int

Add(int

x,inty);};例9.3

成员函数的重载//Bvoid

Text::Set(int

x){X=x;Y=x*x;}void

Text::Set(int

x,int

y){X=x;Y=y;}例9.3

成员函数的重载intText::Add(){return

X+Y;}int

Text::Add(int

x){X=x;Y=x;return

X+Y;}int

Text::Add(int

x,int

y){X=x;Y=y;return

X+Y;}例9.3

成员函数的重载void

main(){Text

f1,f2;f1.Set(1,2);int

i=f1.Add();int

j=f1.Add(3);int

k=f1.Add(3,4);f2.Set();int

m=f2.Add();int

n=f2.Add(5,6);//C//D//E//F//G//H//Icout<<"i="<<i<<"

j="<<j<<"

k="<<k<<"

m="<<m<<"

n="<<n<<endl;}9.4

this指针

Time

hourminute

second

printt2.

print();t1t2t1.

print();成员函数如何正确的引用对象?定义同一类的多个对象时,每一个对象拥有自己的数据成员,但它们共用一份成员函数,当成员函数处理对象时它们使用this指针,通过

this指针指向不同对象来决定使用哪一个对象的数据成员。*this具有如下形式的默认样式:<类名> *const

this例9.4

this指针的使用//A//B//C//Dclass

Sample{intI;public:Sample(int

I=0){this->I=I;}Sample

add(int

k){I+=k;return*this;}void

Display(){cout<<"I="<<this->I<<endl;cout<<"the

value

温馨提示

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

评论

0/150

提交评论