类与对象.docx

上传人:b****6 文档编号:6455796 上传时间:2023-01-06 格式:DOCX 页数:10 大小:20.05KB
下载 相关 举报
类与对象.docx_第1页
第1页 / 共10页
类与对象.docx_第2页
第2页 / 共10页
类与对象.docx_第3页
第3页 / 共10页
类与对象.docx_第4页
第4页 / 共10页
类与对象.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

类与对象.docx

《类与对象.docx》由会员分享,可在线阅读,更多相关《类与对象.docx(10页珍藏版)》请在冰豆网上搜索。

类与对象.docx

类与对象

第五章类与对象

类:

一、相关概念:

(1)、由类生成的变量,不再称作变量,而称对对象。

(2)、在类中的数据称数据成员,函数称为成员函数。

(3)、类的定义格式一般分为说明部分和实现部分。

说明部分是用来说明该类中的成员。

实现部分是用来对成员函数进行定义。

类定义格式:

Class(类名)

{

private:

<私有的数据成员和成员函数>

protected:

<保护的数据成员和成员函数>

Public:

<公有的数据成员和成员函数>

};

(注意:

类中定义的所有成员都是私有的)

其中:

●class:

定义类的关键字;

●<类名>:

一种标识符;

●一对花括号内是类的说明部分,说明该类的成员.

●类的成员包含数据成员和成函数两部分.

(1)、类的数据成员:

(2)、类的成员函数:

成员函数的定义、成员函数的实现

A.成员函数的声明格式:

<类型><成员函数名>(<参数表>);

B.成员函数的实现格式:

<类型><类名>:

:

<成员函数名>(<参数表>)

C.{

<函数体>

}

(注意):

类中的成员函数如果比较简单,也可以在类的定义中实现,同普通函数的语法结构一致.

例:

classDate

{

private:

intyear;

intmonth;

intday;

public:

voidset(inty,intm,intd)

}

类成员函数的存取权限

1)公有成员用public关键字声明,它定义了类的外部接口,只有公有成员才可以被用户程序直接访问

2)私有成员用private关键字声明,它定义了类内部使用的数据和函数,私有的数据成员只能被类本身的成员函数及友元类的成员函数访问,其他类成员函数,包括其派生类的成员函数都不能访问它们.枞1公有成员和私有成员之间,它在类的继承中使用.保护的数据成员与私有数据成员类似,只是除了类本身的成员函数和说明为友元类的成员函数可以访问成员外,该类的派生类的成员函数也可以访问.

(注意:

一个类可以没有私有成员,但是不能没有公有成员)

(成员函数身重载、成员函数缺省参数)

对象:

一、在说明类时,系统是不会分配存储空间的,只有定义对象时才给对象分配相应的内在空间。

(1)、对象的定义:

<类名><对象名>

对象的作用:

用类定义了对象,对象就具有类的所有性质.也就是说,类的数据成员就是对象的数据成员,类的成员函数就是对象的成员函数.

(2)、对象成员的使用:

在程序中创建了对象后,就可以使用对象提供的数据成员或成员函数,访问对象的公有成员的语法铷下:

<对象名>.<数据成员名>;

或者<对象>.<数据成员名>(<参数表>);

构造函数和析构函数

构造函数和析构函数都是类的成员函数,但它们是特殊的成员函数,不用调查用便自动执行,而且这些函数的名字与类的名字有关.

构造函数(用类定义对象时,其语法结构为)

对象函数的注意点:

A.一般没有返回值类型

B.也不能标为void类型

C.构造函数的名称与名称相同

D.要创建一个对象,一般要都是将对象中的数据成员进行初始他和为对象申请必要的存储空间.

E.定义对象就必须具有与构造函数一致的参数表

(构造函数和析构函数类的成员函数,但它们是特殊的成员函数,不用调用便自动执行,而且这些函数的名字与;类的名字有关.)

构造函数重载与默认参数

 

析构函数

在类中定义析构函数的方法是:

class<类名>

{

……

public:

类名()

~类名()

……

}

//构造函数的实现

<类名>:

:

<类名>()

{

…..

}

//析构函数的实现

<类名>:

:

~<类名>()

{

}

析构函数的特点:

Ø析构函数是特殊的成员函数,该函数的名字前为“~”,后面跟着类名该函数不能有任何返回类型,也不能有参数.

Ø一个类只能有一个析构函数

Ø析构函数在对象生命期结束时被直接调用,程序中一般不要调用析构函数.

静态成员

◆在类中,静态成员分为静态数据成员和静态成员函数;

◆静态数据成员不从属于任何一个具体对象,所以必须初始化,而且对它的初始化不能在构造函数中进行

◆静态数据成员的好处:

节省内存、值可以更新.

静态数据成员的使用方法如下:

✧静态数据成员的定义格式为:

<数据类型><静态数据成员名>;

✧静态数据成员初始化的格式为:

<数据类型><类名>:

:

<静态数据通信成员名>=<值>;

✧<类名>:

:

<静态数据成员名>

注意:

初始化在类体外进行,且前面不加static,以免与一般静态变量或对象相混淆.

初始化时使用作用域运算符来标明它所属的类,因此,静态数据成员是类的成员,而不是对象的成员.

静态数据成员使用前必须初始化.静态成员变量的访问控制权限没有意义,所以静态成员变量均为公有成员使用.

静态成员函数

注意:

对静态成员的和不需要用对象名.在静态成员函数的实现中不以直接说明的非静

✧静态成员函数的定义格式为:

<函数类型><静态成员函数名>

✧静态成员函数的访问格式为:

<类名>:

:

<静态成员函数名>(<参数表>)

注意:

静态成员函数只能访问静态数据成员、静态成员函数和类以外的函数和数据(因为非静态数据成员只有对象存在时才有意义)。

类与指针

相关概念:

⏹对象初始化后,会占用内存空间,可以使用指针变量指向对象起始地址,称为对象指针。

A.指向类对象的指针

类作为一种数据类型,可以定义变量(即对象),也可以定义指针,即指向类类型变量(对象)的指针,称为指向类对象或指向对象的指针。

指向类对象指针的定义格式为:

类名*指针变量名;

对象指针一旦指向某一对象后,就可以用它进行访问。

通常使用“—>”或者“(*).”运算符:

指针变量—>成员

(*指针变量).成员

new和delete函数

new和delete是C++动态申请存储单元和删除存储单元的函数.

<类名>*<对象名>=new类名

this指针

✧this指针是隐含在对象内的种指向自己的指针。

当一个对象被创建了之后,它的每一个成员函数都可以使用this指针。

✧this指针是指向当前正在起作用的对象的指针,它用于指向被调用的成员函数所属的对象。

✧“a1.set(7)”读作:

通过对象a1引用成员函数set

✧this指针虽然由系统自动生成和管理,但程序员在程序中也可使用它,通过this指针,可以引用对象内的任何成员(静态成员除外)

指针类对象指针的定义格式为:

类名*指针变量名;

对象指针一旦指向某一对象后,就可以用它进行访问,则访问格式为:

指针变量—>成员

(*指针变量).成员

第六章继承与派生

相关名词:

●继承与派生的概念

●基类和派生类

派生类的定义:

C++中定义派生类的语法格式如下:

Class<派生类名>:

:

<继承方式><基类名>

{

<新增保护成员声明语句>

protected:

<新增保护成员声明语句>

public:

<新增公有成员声明语句>

};

注意:

1.如果子类继承了父亲,则子类自动具有父亲的全部数据成员和成员函数;但是,子类对父类成员的访问有所限制.

2.子类可以定义自己的数据成员和成员函数.

3.基类、派生类(或父类、子类)都是“相对”的。

一个派生出新类的类就是基类。

派生类也可以被其他类继承,这个派生类同时也是基类。

三种继承方式

A.公有继承

派生时用public作继承方式。

基类的公有段(public)成员被继承为公有的。

基类的私有段(private)成员在派生类中不可见。

基类的保护段(protected)成员被继承为保护的。

B.私有继承

派生时用private作继承方式。

基类的公有段(public)成员被继承为私有的

基类的私有段(private)成员在派生类中不可见

基类的保护段(protected)成员被继承为私有的。

C.保护继承

派生时用protected作继承方式。

基类的公有段(public)成员被继承为保护的。

基类的私有段(private)成员在派生类中不可见

基类的保护段(protected)成员被继承为保护的。

注意:

子类想要访问继承来的这个私有成员,必须定义一个公有函数作为接口

C++中下列特征也不能为派生类继承。

a)构造函数;

b)用户定义的new运算符;

c)用户定义的赋值运算符;

d)友员关系;

单继承

单继承就是每个派生类只有一个基类,派生类只从单个基类中继承属性.

构造函数和析构函数

派生类构造函数的一般格式如下:

<派生类名><参数表>:

<基类构造函数名>(<参数表)

{

派生类中新增数据初始化语句

}

派生类的构造函数执行顺序:

调用基类的构造函数.

调用派生类的构造函数体中的内容.

注意:

1.如果基类没有构造函数或其构造函数没有参数,则可不将其列于派生类构造函数的初始化表中.

2.如果基类没有构造函数或构造函数没有参数,则派生类可以没有构造函数.

析构函数

当对象被删除时,派生类的析构函数被执行,由于析构造函数也不能被继承,因此在执行派生类的析构函数时,基类的析构函数也将被调用.

执行顺序:

1.执行派生类析构函数.

2.执行基类析构函数.

其顺序与执行构造函数时的顺序正好相反.

多继承

多继承派生类的语法格式如下:

Class<派生类名>:

<继承方式1><基类名1>,<继承方式2><基类名2>,、、、

{

<新增成员列表>

};

多继承的构造函数

派生类的构造函数格式如下:

<派生类名>(<总参数表>):

<基类名1>(<参数表1>)<基类名2>(<参数表2>)、、

{

<派生类构造函数体>

}

多继承的构造函数按照下面的原则被调用:

1)先基类,后自己.即先的构造函数,再执行派生类本身的构造函数

2)在同一层上的各基类按构造函数,按派生时定义的先后次序执行.

功能一、另外,多重继承允许分别设置基类的派生权限

虚基类

在多继承中,若在多条继承路径上,有公共基类,这个公共基类便会产生多个副本.

对于这种多义性有两种处理方法:

一是在成员名之前冠以类名和作用域分辨符“:

”;

二是采用虚基类的方法。

作用域分辨符

作用域分辨符就是我们经常见到“:

”;它可以用来限制访问的成员所在的类型的名称,一般语法格式如下:

1.对象名.基类名:

:

成员名;

2.对象名.基类名:

:

成员名(参数表);

虚基类说明

为了解决同名成员的唯一性问题,把公共基类定义为虚基类.使用虚基类的继承称为虚拟继承.

虚基类在定义由基类直接派生类时说明,说明格式如下:

class<派生类名>:

virtual<继承方式><基类名>

虚基类的构造函数

派生类构造函数调用的次序有以下原则:

1.虚基类的构造函数在非虚基类之前调用

2.若同一层次中包含多个虚基类,这些虚基类的构造函数按它们说明的次序调用

3.若虚基类由非虚基类派生而来,则仍按先调用基类构造函数,再调用派生类中构造函数的执行顺序.

第七章多态性和虚函数

一、静态联编和动态联编

二、虚函数和抽象类

1.虚函数的定义

虚函数的定义方法如下:

Virtual<函数类型><虚函数名>(<参数列表>);

定义虚函数要遵循以下规定:

1)类的构造函数不可以定义为虚函数.

2)类的构造函数不可以定义为虚函数.

3)非类的函数不可以定义为虚函数

纯虚函数

纯虚函数是一种特殊的虚函数,它只有函数的声明,没有具体实现函数的功能.在类的构造函数和析构函数中不能够调用它们,但其他成员函数可以调用它们,纯虚函数的声明格式如下:

Virtual<函数类型><虚函数名>(<参数表>)=0;

纯虚函数不可以被直接调用,也不可以被继承.

抽象类

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1