您的位置:首页 > 编程语言 > C语言/C++

C++学习笔记 lesson2 类和对象

2017-01-02 20:15 459 查看

可变长数组举例

#include<cstringt.h>
//可变长数组
// new delete  更改长度 new新空间 , copy旧空间 , delete旧空间
// malloc free relloc  分配起来更简单
class MyArray
{
public:

MyArray(const  size_t len=10)//给初始长度
{
_index = 0;
_len = len;
_data = new int[_len];
}
~MyArray()
{
if (_data)
delete[]_data;
}

int GetData(const size_t index) const
{
if (_len > index)
return _data[index];
return 0;
}

void SetData(const size_t index, const int num)
{
if (_len > index)
_data[index] = num;
}

unsigned int GetLen() const //有效的长度 返回_index
{
return _index;
}

void AddData(const int num) //可以把Add和set合并
{
if (_index >= _len)
{
_len = _index * 2;
int *temp = new int[_len];//每次分配*2的空间
memcpy(temp, _data, _index*sizeof(int));
delete[]_data;
_data = temp;

}
_data[_index++] = num; // index后++ ,否则无_data[0]
}
void AddData(const MyArray&data) //增加自身对象
{
for (unsigned int i = 0; i < data._index; ++i)
{
//const 方法能够被const对象调用, const对象只能调用const方法
AddData(data.GetData(i));//不能将“this”指针 每一个对象里面的隐藏属性,每一个对象都有

//this 是一个对象的代名词,区分不同的对象
//每一个类里面,为了区分每一个对象,会默认包含一个this指针
//
}

}
void AddData(const int *data,const unsigned int ) //增加数组,需要长度参数
{
for (int i = 0; i < _len; i++)
{
AddData(data[i]);
}
}//写函数的重载时,会相互调用,节约代码量

/*int& Index( const size_t index)
{
if (index<_len)
return _data[index];
} 使用引用直接返回,返回index>len的情况不方便表示*/
private:
int *_data;
unsigned int _len;   //已经分配的空间
unsigned int _index;  //已经使用的空间
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: