首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >1小时掌握c++面向对象编程

1小时掌握c++面向对象编程

作者头像
mathor
发布2018-07-24 15:11:22
5540
发布2018-07-24 15:11:22
举报
文章被收录于专栏:mathormathor

三、类和复杂对象

3.1 对象指针和对象引用作函数参数

3.1.1对象指针作函数参数

优点:

实现传址调用。可在被调用函数中改变调用函数的参数对象的值,实现函数之间的信息传递

使用对象指针实参仅将对象的地址值传递给形参,而不进行副本的拷贝,这样可以提高运行效率,减少时间开销

3.1.2 示例

图3-1 对象指针作函数参数

3.1.3 对象引用作函数参数

优点:

该方法除了具有对象指针作函数参数的优点外,还更简单更直接,应用更广

3.1.4 示例

图3-2 对象引用做函数参数

3.2 this指针

3.2.1 特点

该指针是隐含于每一个类的成员函数中的特殊指针

该指针指向正在被某个成员函数操作的对象

*this标识调用该成员函数的对象

3.2.2 示例

图3-3 this指针

3.3 对象数组

3.3.1 对象数组的定义

<类名> <数组名>[<大小>]... 例如 DATE dates[7];DATE date2[3][5];

3.3.2 对象数组赋初值与赋值

数组元素通过匿名对象赋值,即,DATE xx(1,1,1998);dates[0] = xx(1,1,1998);释放xx

3.3.3 示例

图3-4 对象数组

*3.4 指向数组的指针和指针数组(这一部分不做讲解)

3.4.1 指向数组的指针

<类型说明符> (*<指针名>)[<大小>]...

3.4.2 指针数组

<类型名> * <数组名>)[<大小>]...

3.5 常类型

使用类型修饰符const说明的类型

常类型的变量或对象的值是不能被更新的

定义或说明常类型时必须初始化

const修饰其左边的类型

3.5.1 一般常量(简单类型的常量)

<类型说明符> const <常量名> 或 const <类型说明符> <常量名>

3.5.2 示例

图3-5 一般常量

3.5.3 常对象

<类名> const <对象名>

3.5.4 示例

图3-6 常对象

3.5.5 常指针

图3-7 常指针

3.5.6 常引用

const <类型说明符> & <引用名>

注意!常引用所引用的对象不能被更新,示例见下图

图3-8 常引用

3.5.7 常指针与常引用的作用

使用常参数表明该函数不会更新某个参数所指向或所引用的对象,并使该函数具有更大的适应性

3.5.8 示例

图3-9 常指针与常引用

3.6 常成员函数

使用const关键字进行说明的成员函数

<类型说明符> <函数名>(<参数表>) const

const是函数类型的一个组成部分,在函数实现部分必须带有const关键字

只有常成员函数才能操作常对象

3.6.1 成员函数与对象之间的操作关系

图3-10 成员函数与对象之间的操作关系

3.6.2 示例

图3-11 成员函数与对象之间的操作关系1

图3-12 成员函数与对象之间的操作关系2

3.7 常数据成员

const类型对象必须被初始化,并且不能被更新

常数据成员只能通过成员初始化列表的方法进行初始化

3.7.1 示例

图3-13 常数据成员

3.8 子对象

当一个类的成员是另一个类的对象时,该对象就为子对象

子对象即对象成员

当类中出现了子对象(对象成员)时,该类的构造函数要包含对子对象的初始化,通常采用成员初始化列表的方法来初始化子对象

3.8.1 示例

图3-14 子对象

3.8.2 说明

子对象必须在成员初始化列表中初始化

建立一个对象时,它的所有子对象一起建立

先执行子对象构造函数,再执行对象的构造函数体

析构函数的执行顺序与构造函数的执行顺序严格相反

构造函数的调用顺序仅与子对象在类中声明的顺序有关,而与成员初始化列表中给出的对构造函数的调用顺序无关

构造函数的成员初始化列表中未给出对子对象的调用,则表示使用子对象的缺省构造函数

3.9 堆对象

在程序运行过程中根据需要可以随时建立或删除的对象

堆对象运算符:new、delete

3.9.1 new运算符

动态创建堆对象

格式:new <类型说明符> (<初始值列表>)

new运算符返回一个与new所分配对象类型相匹配的指针

如果new运算符不能分配到所需要的内存,将返回0,这时为空指针

使用new运算符创建对象时,它可以根据其参数来选择适当的构造函数

3.9.2 new创建数组

格式:new <类型名> [<算术表达式>]

例如:A *ptr;ptr=new A[5];

使用new创建对象数组或一般数组时,不能为该数组指定初始值,其初始值为缺省值

使用new[]创建对象数组时,类中必须说明缺省构造函数

3.9.3 delete运算符

删除用new创建的对象或一般类型的指针

格式:delete <指针名>

例如:A *ptr;ptr=new A(5,6);delete ptr;

3.9.4删除对象数组

格式:delete[] <指针名>

例如:A *ptr;ptr=new A[5];delete[] ptr;

注意:必须用于由运算符new返回的指针

      该运算符也适用于空指针(即其值为0的指针)

      对一个指针只能使用一次delete操作

指针名前只用一对方括号符([]),并且不管所删除数组的维数,忽略方括号内的任何数字

3.9.5 示例

图3-15 动态创建堆对象

图3-16 动态创建对象数组

    传送门:1小时深入c++面向对象编程

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-01-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档