![v2-2e669e7f3705eee2931f5c6fa8390e32_1440w.jpg?source=172ae18b](http://img-01.proxy.5ce.com/view/image?&type=2&guid=b32ba81a-352a-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/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.
参考
- ^https://www.learncpp.com/cpp-tutorial/10-1-object-relationships/
- ^https://www.learncpp.com/cpp-tutorial/103-aggregation/
- ^https://www.learncpp.com/cpp-tutorial/10-4-association/