复习:上节作业讲解

注意点:

设计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的语义代表:不能被修改,只读的。

PoEdu - C++阶段班【Po学校】- Lesson02_类与对象_第4天的更多相关文章

  1. PoEdu - C++阶段班【Po学校】- Lesson03-4_构造函数&赋值函数&拷贝构造函数&学习方式 - 第6天

    PoEdu - C++阶段班[Po学校]- 第6天 课堂选择题目: 1  关于转换构造函数  ClassDemo demo = 1;  调用转换构造函数 2  关于拷贝赋值函数  demo =2; 首 ...

  2. PoEdu - C++阶段班【Po学校】- 第3天

    引用 C中指针的功能强大,使用起来繁杂,因为指针要控制的东西太多:有指针的类型,指针的解引用,指针空间内的值,它本身是有空间的,有自己的地址等.指针也是强大的,比如:我们要在函数之内,修改方法之外的值 ...

  3. PoEdu - C++阶段班【Po学校】- 第1课

    1 C++开讲 C ++  伟大的编程语言:能提高程序运行效率,节约更多的资源,"正确的使用C++,能够抑制全球变暖问题". 2 C++能力雷达图 通过 1效率 2灵活度 3 抽象 ...

  4. PoEdu - C++阶段班- Lesson07 To Lesson10_C to C++

    07  重载导致的二义性 问题:为什么一定要重载呢?重载能方便我们注重函数的功能,当参数类型不确定时,我们能很便捷的利用重载的机制达到目的. 重载注意点:二义性 看代码: #include <c ...

  5. PoEdu - C++阶段班- Lesson02_C to C++

    1  原生bool类型 c++里面的bool类型才是真正原生的true和faul,比如常见的大写的"BOOL",它就不是原生的. 原生的与非原生的bool,它们的区别: 详细说下原 ...

  6. java类与对象_成员变量和局部变量区别

    成员变量和局部变量:1.成员变量:再类中定义,用来描述对象将要有什么.2.局部变量:在类的方法中定义,在方法中临时保存数据.区别:1.作用域不同:  局部:仅限于定义它的方法  成员:整个类中都是可见 ...

  7. c++中的类和对象_概念

    类:事物所具有的共性(行为.属性)抽象出来封装在一起 对象:由类型实例化出对象 c++与c struct的区别:c中不能存放函数,只能存放属性,方法和属性分离,c++中则可存放函数. c中表示事物的方 ...

  8. python基础----面向对象的程序设计(五个阶段、对小白的忠告、关于OOP常用术语)、类、对象

    一.面向对象的软件开发有如下几个阶段                                              1.面向对象分析(object oriented analysis ,O ...

  9. 大数据学习day14-----第三阶段-----scala02------1. 元组 2.类、对象、继承、特质 3.函数(必须掌握)

    1. 元组 映射是K/V对偶的集合,对偶是元组的最简单的形式,元组可以装着多个不同类型的值 1.1 特点 元组相当于一个特殊的数组,其长度和内容都可变,并且数组中可以装任何类型的数据,其主要用处就是存 ...

随机推荐

  1. 特殊js事件

    1:点击enter事件 $(document).keypress(function(e) { // 回车键事件 if(e.which == 13) { submitForm(); } }); 2:JQ ...

  2. 学生信息管理系统(自己辛辛苦苦做了几天,虽然简陋,也凑合吧,bug不算太严重,主要是格式不太很完美)

    /*学生成绩管理系统V3.0(链表版)某班有最多不超过30人(具体人数由键盘输入)参加期末考试,最多不超过6门(具体门数由键盘输入).使用链表编程成实现如下菜单驱动的学生成绩管理系统.1.从文件读入每 ...

  3. asp.net的JSONHelper 类

    调用方法: ){    jsons = json.ToString();}else{    jsons = @"{success:false}";}return jsons; JS ...

  4. Flume整合Spark Streaming

    Spark版本1.5.2,Flume版本:1.6 Flume agent配置文件:spool-8.51.conf agent.sources = source1 agent.channels = me ...

  5. 枚举类valueOf方法的疑问

    枚举类中valueOf方法只有一个参数而Enum类中有两个参数,请问Enum实例类中的valueOf方法是从何处继承而来?   答案:jvm进行编译的时候添加的.

  6. 40、dom以xml结尾的文件

    1.student.xml文件 <?xml version="1.0" encoding="utf-8" ?> <!-- 1.书写根元素(因为 ...

  7. div水平居中且垂直居中

    <style> .vertical-center{ position: absolute; top: 50%; left: 50%; transform: translate(-50%, ...

  8. HTML DOM 对象简单介绍

    文档对象模型(Document Object Model,DOM)是DHTML的基础. 常用对象:1)window对象:表示对象浏览器窗口(选项卡)对象.2)document对象:代表整个网页,是客户 ...

  9. 仿QQ的底部选项

    效果图: item_add.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout ...

  10. Sql 触发器禁用和启用

    --启用or禁用指定表所有外键约束 alter table tbname NOCHECK constraint all alter table tbname CHECK constraint all ...