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

三、类和复杂对象

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++面向对象编程

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏静默虚空的博客

Java正则速成秘籍(二)之心法篇

导读 正则表达式是什么?有什么用? 正则表达式(Regular Expression)是一种文本规则,可以用来校验、查找、替换与规则匹配的文本。 又爱又恨的正...

19010
来自专栏Java 源码分析

静态内部类

定义:静态内部类,定义在类中,任何方法外,用static定义;静态内部类只能访问外部类的静态成员。 注意点: 一般情况下,如果一个内部类不是被定义成静态内部类,...

3148
来自专栏十月梦想

变量和常亮

在函数内,变量的使用需要声明常量的作用域globay变量名(全局作用)local(局部)static(静态)

732
来自专栏猿人谷

const用法小结

常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。因此,定义或说明常类型时必须进行初始化。 概述 1. const有什么...

1837
来自专栏测试开发架构之路

C和指针小结(C/C++程序设计)

C和指针 相关基础知识:内存的分配(谭浩强版) 1、整型变量的地址与浮点型/字符型变量的地址区别?(整型变量/浮点型变量的区别是什么) 2、int *p,指向整...

33611
来自专栏猿人谷

JDK1.7源码分析01-Collection

同步发布:http://www.yuanrengu.com/index.php/20180221.html Java的集合类主要由两个接口派生而出:Collec...

3335
来自专栏Puppeteer学习

OOP in Javascript

1245
来自专栏编程

Python基础知识2:字典

字典一种key - value 的数据类型,就像上学用的字典通过拼音查找汉字一样;字典是Python语言中唯一的映射类型。字典对象是可变的,它是一个容器类型,能...

22710
来自专栏黑泽君的专栏

final关键字、多态、抽象类、接口的小复习

--------------------------------------- 1:final关键字可以干什么?有什么特点?   最终的意思。可以修饰类,方法...

812
来自专栏ShaoYL

【C语言】指针

4826

扫码关注云+社区