动态内存分配类实现

今天学习了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; }

动态内存分配类实现,布布扣,bubuko.com

时间: 2024-10-13 01:39:57

动态内存分配类实现的相关文章

C++ primer plus读书笔记——第12章 类和动态内存分配

第12章 类和动态内存分配 1. 静态数据成员在类声明中声明,在包含类方法的文件中初始化.初始化时使用作用域运算符来指出静态成员所属的类.但如果静态成员是整形或枚举型const,则可以在类声明中初始化. P426-P427类静态成员的声明和初始化 //strnbad.h class StringBad { private: static int num_strings; … }; //strnbad.cpp int StringBad::num_strings = 0; 不能在类声明中初始化静态

《C++ Primer Plus》读书笔记之十—类和动态内存分配

第12章 类和动态内存分配 1.不能在类声明中初始化静态成员变量,这是因为声明描述了如何分配内存,但并不分配内存.可以在类声明之外使用单独的语句进行初始化,这是因为静态类成员是单独存储的,而不是对象的组成部分.注意:静态成员在类声明中声明,在包含类方法的文件中初始化.初始化时使用作用域操作符来指出静态成员所属的类.但如果静态成员是整型或枚举型const,则可以在类声明中初始化. 2.当使用一个对象来初始化另一个新建对象时,编译器将自动生成一个复制构造函数,因为它创建对象的一个副本.复制构造函数的

C++-类和动态内存分配 大发彩_票平台开发

大发彩_票平台开发 地址一:[hubawl.com]狐霸源码论坛地址二:[bbscherry.com] 类和动态内存分配 动态内存和类 C++在分配内存时是让程序在运行时决定内存分配,而不是在编译时决定. 这样,可根据程序的需要,而不是根据一系列严格的存储类型规则来使用内存.C++使用new和delete运算符来动态控制内存. 1.1. 复习示例和静态类成员 这个程序使用了一个新的存储类型:静态类成员. //strngbad.h#include<iostream>#ifndef STRNGBA

类和动态内存分配

类和动态内存分配 整理自<C++ Primer Plus> 1. 动态内存和类 静态类成员有一个特点:无论创建了多少对象,程序都只创建一个静态类变量副本.也就是说,类的所有对象共享同一个静态成员.静态数据成员在类声明中声明,在包含类方法的文件中初始化. 复制构造函数用于将一个对象复制到新创建的对象中.也就是说,也就是说,它用于初始化过程中(包括按值传递参数),而不是常规的赋值过程中.按值传递意味着创建原始变量的一个副本.由于按值传递对象将调用复制构造函数,因此应该按引用传递对象.这样可以节省调

String类型_static成员_动态内存分配_拷贝构造函数_const关键字_友元函数与友元类

1:String类型 1 #include <iostream> 2 using namespace std; 3 int main() 4 { 5 //初始化方法 6 string s1 = "hello";//默认构造方法 7 string s2(s1);//将s2初始化为s1的一个副本 8 string s3("value");//将s3初始化为字符串的副本 9 string s4(10,'x');//将字符串初始化为字符x的10个副本 10 co

C++动态内存分配

笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D实战核心技术详解>电子工业出版社等. CSDN视频网址:http://edu.csdn.net/lecturer/144 C / C ++中的动态内存分配是指程序员手动执行内存分配, 动态分配的内存分配给堆,非静态和局部变量获取在Stack上分配的内存.详情查看上篇博文:C程序的内存布局. 什么是应用程序? 动态分配的

SQLite剖析之动态内存分配

SQLite通过动态内存分配来获取各种对象(例如数据库连接和SQL预处理语句)所需内存.建立数据库文件的内存Cache.以及保存查询结果.我们做了很多努力来让SQLite的动态内存分配子系统可靠.可预测.健壮并且高效.本文概述SQLite的动态内存分配,软件开发人员在使用SQLite时可以据此获得最佳性能. 1.特性    SQLite内核和它的内存分配子系统提供以下特性:    (1)对内存分配失败的健壮处理.如果一个内存分配请求失败(即malloc()或realloc()返回NULL),SQ

继承和动态内存分配

假设基类使用了动态内存分配,而且定义了析构函数.复制构造函数和赋值函数,但是在派生类中没有使用动态内存分配,那么在派生类中不需要显示定义析构函数.复制构造函数和赋值函数. 当基类和派生类采用动态内存分配时,派生类的析构函数.复制构造函数.赋值运算符都必须使用相应的基类方法来处理基类元素.这种要求是通过三种不同的方式来满足的.对于析构函数.这是自动完成的,也就是说在派生类的析构函数中无需显示调用基类的析构函数.对于构造函数,这是通过在初始化成员类别中调用基类的复制构造函数来完成的,如果不这样做,将

C++ 动态内存分配(6种情况,好几个例子)

1.堆内存分配 : C/C++定义了4个内存区间: 代码区,全局变量与静态变量区,局部变量区即栈区,动态存储区,即堆(heap)区或自由存储区(free store). 堆的概念: 通常定义变量(或对象),编译器在编译时都可以根据该变量(或对象)的类型知道所需内存空间的大小,从而系统在适当的时候为他们分配确定的存储空间.这种内存分配称为静态存储分配: 有些操作对象只在程序运行时才能确定,这样编译时就无法为他们预定存储空间,只能在程序运行时,系统根据运行时的要求进行内存分配,这种方法称为动态存储分