PoEdu - C++阶段班【Po学校】- Lesson02_类与对象_第4天

复习:上节作业讲解

注意点:

设计SetString()的时候,要注意重置原来的空间。

char * SetString(const char *str)
{
_len = strlen(str);
delete[]_str;
_str=new char[_len + sizeof(char)];
strcpy(_str,str);
}

字符串数组中,赋值新的字符串之前,要重置先前的空间,重新new一块空间。

PoEdu - C++阶段班【Po学校】- Lesson02_类与对象_第4天

一定要注意内存泄漏的问题。


MyArray()函数实现:

私有的数据,设计为了安全。举例银行里面的钱。

注意:尝试对一个空指针操作,在某些编译器上会报错

PoEdu - C++阶段班【Po学校】- Lesson02_类与对象_第4天

正确的写法,要加上判断

~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的时候,返回什么呢?函数返回的是一个引用,那么抛出一个什么呢?抛出它本身?那也不是我们想要的,只能抛出异常。

PoEdu - C++阶段班【Po学校】- Lesson02_类与对象_第4天

课堂中,这个问题先暂时放在这里,以后有更好的方式方法来解决。

来设计 AddData()时,发现:增加的时候,重新new多少空间呢?我们不知道,因为类中只设计了数组长度_len,_len有没有用完,我们也不知道,那么,有必要设计一个数组实际使用个数的记录_index。

PoEdu - C++阶段班【Po学校】- Lesson02_类与对象_第4天

初始化的时候,注意指针的初始化。如果设计为空指针,以后的调用会很成问题,对一个空指针的操作会报错。

还有数组的长度,_len默认最好是有个数值。

PoEdu - C++阶段班【Po学校】- Lesson02_类与对象_第4天

如果要增加数组本身里面的数据到数组里面,怎么设计?或者我直接加一个数组进来,怎么做?

PoEdu - C++阶段班【Po学校】- Lesson02_类与对象_第4天

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指针空间里面存放的是些什么:

PoEdu - C++阶段班【Po学校】- Lesson02_类与对象_第4天

this它的值就是对象所在内存空间的地址头。

方法也有const方法

PoEdu - C++阶段班【Po学校】- Lesson02_类与对象_第4天

当方法里面不改变里面参数的值的时候,此方法可以设置成const方法,const方法能够被const对象调用。const对象只能调用const方法。

如果方法内部,已经改变了值的,就不能随便的就把方法加上const,以求编译通过,因为加了const表示的“语义”已经改变。const的语义代表:不能被修改,只读的。

上一篇:[LeetCode] Find All Numbers Disappeared in an Array 找出数组中所有消失的数字


下一篇:leetcode 203. Remove Linked List Elements 、83. Remove Duplicates from Sorted List 、82. Remove Duplicates from Sorted List II(剑指offer57 删除链表中重复的结点)