今天学习了C++语言的内存动态分配,并借助所学的知识实现了一个动态内存分配类。
问题的背景为:在已经实现了一个点类的基础上,实现一个动态内存分配类,这个类
的功能为:实现根据输入的数目size,动态的生成size个点类对象;并在提供一个借口
可以对pos位置的对象进行操作;在对象生存期结束时,可以自动释放分配的内存空间。
根据描述的问题描述的需求,规划了如下的类图:
写出了一个包含三个方法的对点动态分配内存的类:
1: #ifndef _ARRAYOFPOINTS_H
2: #define _ARRAYOFPOINTS_H
3:
4: #include<iostream>
5: #include<cassert>
6: using namespace std;
7:
8: class points
9: {
10: /*点类的数据成员和函数成员 */
11: public:
12: points():x(0),y(0) { }
13: points(int x, int y):x(x),y(y) { }
14: ~points() {cout<<"Destructor called!"<<endl;}
15: int getx() const
16: {
17: return x;
18: }
19: int gety() const
20: {
21: return y;
22: }
23: void moveto(int newx, int newy)
24: {
25: x = newx;
26: y = newy;
27: }
28: private:
29: int x;
30: int y;
31: };
32: class ArrayOfPoints
33: { /*给点对象动态分配内存的类数据成员和函数成员*/
34: public:
35: ArrayOfPoints(int size):size(size) //构造函数,动态分配size个点对象内存
36: {
37: point = new points[size];
38: }
39: ~ArrayOfPoints() //析构函数,释放分配的内存
40: {
41: std::cout<<"deleting..."<<std::endl;
42: delete[] point;
43: }
44: points & elenment(int index) //提供给操作者的接口,可随机操作pos位置的点对象
45: {
46: assert(index>=0 && index<size);
47: return point[index];
48: }
49: private:
50: int size;
51: points* point;
52: };
53: #endif // _ARRAYOFPINTS_H
54:
55:
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }