复习:上节作业讲解
注意点:
设计SetString()的时候,要注意重置原来的空间。
char * SetString(const char *str)
{
_len = strlen(str);
delete[]_str;
_str=new char[_len + sizeof(char)];
strcpy(_str,str);
}
字符串数组中,赋值新的字符串之前,要重置先前的空间,重新new一块空间。
一定要注意内存泄漏的问题。
MyArray()函数实现:
私有的数据,设计为了安全。举例银行里面的钱。
注意:尝试对一个空指针操作,在某些编译器上会报错
正确的写法,要加上判断
~MyArray()
{
if(_data)delete []_data;
}
函数的选择,new delete 和C中的 malloc free relloc 只有最适合的函数,不存在只用哪种风格
写到这里,注意:引用 的局限
int & Index(const std::size_t index)
{
if(index < _len)
return _data[index];
//抛出异常
}
上面的代码,如果index不小于_len的时候,返回什么呢?函数返回的是一个引用,那么抛出一个什么呢?抛出它本身?那也不是我们想要的,只能抛出异常。
课堂中,这个问题先暂时放在这里,以后有更好的方式方法来解决。
来设计 AddData()时,发现:增加的时候,重新new多少空间呢?我们不知道,因为类中只设计了数组长度_len,_len有没有用完,我们也不知道,那么,有必要设计一个数组实际使用个数的记录_index。
初始化的时候,注意指针的初始化。如果设计为空指针,以后的调用会很成问题,对一个空指针的操作会报错。
还有数组的长度,_len默认最好是有个数值。
如果要增加数组本身里面的数据到数组里面,怎么设计?或者我直接加一个数组进来,怎么做?
void AddData(const Myarray & data)
{
for(unsigned int i = ; i < data._index; ++i)
{
AddData(data.GetData(i));
}
}
this指针
每一个对象里面都隐藏着一个this指针,使用this来区分不同的对象。this就是一个对象的代名词,和类是没有关系的。因为类是“设计图纸”,是机器人的“构造图纸”,类没有new空间,所以this就和类没有关系,this 这个指针所指向的是对象本身。
我们可以用内存看看this指针空间里面存放的是些什么:
this它的值就是对象所在内存空间的地址头。
方法也有const方法
当方法里面不改变里面参数的值的时候,此方法可以设置成const方法,const方法能够被const对象调用。const对象只能调用const方法。
如果方法内部,已经改变了值的,就不能随便的就把方法加上const,以求编译通过,因为加了const表示的“语义”已经改变。const的语义代表:不能被修改,只读的。