c++new时赋初值_C++ Lesson 7:new,delete & 类的重用

v2-2e669e7f3705eee2931f5c6fa8390e32_1440w.jpg?source=172ae18b

在使用array之前,并不确定到底要存多少个数;但是定义array的时候,需要确定大小。如何让数组大小动态进行分配?第一块基本出自郑莉老师的《C++程序设计》第九章。

一、动态内存分配和释放——new运算和delete运算

1、在程序运行的时候,按照需求随时在堆上动态分配一块内存空间让程序使用。在使用结束后再由程序释放。

  • new运算
    • 通过new运算进行内存的动态分配。语法:new type(初值列表)
    • 作用:运行到这一块的时候,申请分配一块用于存储相应数据类型的内存空间。如果申请成功,那么对这块空间进行初始化,并返回这块空间的首地址。
double 
  • delete运算
    • 当new运算申请的空间使用完毕之后,使用delete进行内存的动态释放(一定到delete)。
    • 语法:delete 指针变量名;
int 

例子:

#include

2、如果我们相对一个对象创建多个实例,每次创建一个实例、重新分配内存并不有效。对于一个内存块(a chunk of memory)进行单一分配更加有效,这个内存块中能够容纳多个对象。

char 

二、类的关系[1]

1、对象的关系

当我们走在路上看到某个植物的时候,即便不知道具体的品种,但是也知道植物有绿叶、收集阳光;有花繁殖自己;如果掐死植物,花也会谢。这是从类中生成的实例。

同样,程序中到处都是循环模式、关系以及等级(recurring patterns, relationships and hierarchies)。

  • 对象的关系(relationships between objects)
    • part of
    • have a
    • use a
    • depend on
    • member of

2、组成(composition-have a)

  • 复杂的对象是由简单的对象组成。
  • composition的类型:composition & aggression

(1)composition

  • 定义composition:part-whole的关系,部分一定组成整体;whole的诞生和消亡决定了part的命运。整体知道部分的存在,但是部分不知道整体的存在——单向关系。

例子:

首先在ubuntu中生成3个文件,分别是"p.h" "c.h" "main.cpp",然后通过emacs以及进入编辑。

p.h,定义坐标类

#ifndef POINT_H

c.h定义城市名+坐标类:

#ifndef CREATURE_H

主函数main.cpp

#include 

然后在ubuntu中,输入

g++ main.cpp -o main -std=c++11

可以看到,Creature调用了Point。

(2)Aggregation[2]

  • composition差不多,Aggregation也是刻画了part-whole的关系。
  • 和composition的差异,part能够同属于多个对象,因此whole对象的诞生和消亡不会影响part
  • 就像车和引擎,引擎是车的一部分,但是车坏了,引擎还在。
  • 在aggregation中,part依然是成员变量;但是这些成员变量要么是引用,要么是指向对象的指针,这些对象在类的外面定义。因此,当类销毁时,指针或者引用成员变量也会被小会,但是不会被删除。
  • 例子

3、Association[3]——use a

  • 两个不相关的对象在一起。
  • 例如医生患者,患者use a医生。
  • Association必须要使用指针,对象指向associated对象。

待续。。

参考书籍:

C++程序设计/郑莉,李超编著.——北京:机械工业出版社,2012.1.

参考

  1. ^https://www.learncpp.com/cpp-tutorial/10-1-object-relationships/
  2. ^https://www.learncpp.com/cpp-tutorial/103-aggregation/
  3. ^https://www.learncpp.com/cpp-tutorial/10-4-association/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值