为了账号安全,请及时绑定邮箱和手机立即绑定
  • 深拷贝
    查看全部
  • 当有指针的时候进行拷贝会使指针指向同一块内存,arr1修改值会使内存中的值发生改变,arr2修改值也会使内存中的值发生改变,致使arr1和arr2的值相同。释放内存时去释放指针也将会出现问题,计算机会崩溃。 我们要的是拷贝值,而不是使指针指向相同的内存。 当进行对象拷贝时不是简单的进行值的拷贝,而是将堆中内存的数据也进行拷贝,这种拷贝模式即为深拷贝。
    查看全部
  • 看图。 实例化 Line 的时候,先调用 Coordinate 构造函数,再调用 Line 构造函数,销毁的时候,先销毁堆中的对象即 Coordinate 对象,再销毁 Line 对象。跟对象成员有区别,对象成员会先销毁 Line 对象,再销毁内层的 Coordinate 对象。
    查看全部
  • 栈区和堆区
    查看全部
    0 采集 收起 来源:[C++]对象数组

    2016-09-11

  • int (void) { Coordinate coord[3]; coord[1].m_ix = 10; //定义栈 Coordinate *p = new Coordinate[3]; p[0].m_iY = 20; p ->m_iY = 20; delete []p; //定义堆 p = NULL; return 0; }
    查看全部
    0 采集 收起 来源:[C++]对象数组

    2018-03-22

  • class Corrdinate { public: Corrdinate(); ~Corrdinate(); public: int m_iX; int m_iY; }; #include "Coordinate.h" #include <iostream> using namespace std; Corrdinate::Corrdinate() { cout << "Coordinate" <<endl; } Corrdinate::~Corrdinate() { cout << "~Corrdinate" <<endl; } #include <iostream> #include <stdlib.h> #include "Coordinate.h" using namespace std; int main(void) { //Corrdinate *p1 = NULL; //p1 = new Corrdinate; //Corrdinate *p2 = new Corrdinate(); //p1->m_iX = 10; //p1->m_iY = 20; //(*p2).m_iX =30; //(*p2).m_iY =40; //cout <<p1->m_iX +(*p2).m_iX <<endl; //cout <<p1->m_iY +(*p2).m_iY <<endl; //delete p1; //p1= NULL; //delete p2; //p2 = NULL; Corrdinate p1; Corrdinate *p2 = &p1; p2->m_iX = 10;//(*p2).m_iX = 10; p2->m_iY = 20;//(*p2).m_iY = 20; cout <<p1.m_iX <<endl; cout <<p1.m_iY <<endl; system("pause"); return 0; }
    查看全部
  • 1.p[0]指向第一个元素;执行p++之后p[0]指向第2个了!!!<br> 2.释放内存时要注意指针 p 指回原来的位置。用delete释放数组内存时要注意此时的指针*p要指到该数组的第一个元素上。保证申请和释放的是同一段内存<br> ps:遍历通俗来讲就是打印出数组中每个元素的信息
    查看全部
  • 对象指针使用方式
    查看全部
    0 采集 收起 来源:[C++]对象指针

    2016-09-11

  • 实例化一个对象时调用拷贝函数,完成对象到对象的拷贝时调用拷贝构造函数如Array arr2(arr1)。当数据成员中含有指针时,进行深拷贝或浅拷贝。深拷贝在这两个过程中申请内存两次,这样对象到对象的赋值拷贝是两个不同的内存块之间的操作,所以释放时不会出现问题,在调用拷贝构造函数时搞清楚Array(const Array &arr)引用的是哪一个对象,也就是要拷贝哪一个,拷贝那些数据成员,这与构造函数完成的任务差别很大,希望自己不要弄混了。
    查看全部
  • 对象数组在栈区和堆区的内存分配:(实例化对象数组) 栈:当数组使用完成之后,数组中的变量会自动回收。 堆:用new就必须用delete,p每往下加1就是指向下一个。
    查看全部
    0 采集 收起 来源:[C++]对象数组

    2016-09-11

  • 对象数组的两种定义方式<br> 栈中申请: Coordinate coord[3];<br> 堆中申请: Coordinate *p = new Coordinate[3]; 通过栈定义的数据成员和成员函数只能用.来访问。通过堆定义的数据成员的访问能用. 和->。 -> 只能用于有指针的。
    查看全部
    0 采集 收起 来源:[C++]对象数组

    2018-03-22

  • 拷贝构造函数是为了对象之间初始化赋值的,浅拷贝将新对象再一次指向了旧对象分配的内存单元,释放时容易崩溃。而深拷贝采用新的内存申请和循环赋值可以避免重复使用一个块内存。
    查看全部
  • p就是p[0],p+1就是p[1],p+2就是p[2],所以可以用p->m_iX和p->m_iY
    查看全部
    0 采集 收起 来源:[C++]对象数组

    2018-03-22

  • 栈中申请: Coordinate coord[3]; 堆中申请: Coordinate *p = new Coordinate[3];
    查看全部
    0 采集 收起 来源:[C++]对象数组

    2016-09-10

  • 如果Coordimate类有默认构造函数,也就是不带参数的构造函数,那么Line类就可以不使用初始化列表。如果只有带参数的构造函数,那么必须用初始化列表
    查看全部

举报

0/150
提交
取消
课程须知
本课程是C++初级课程 需要掌握C++语言基础语法 如果不太熟悉的话,可以观看: 《C++远征之起航篇》 《C++远征之离港篇》 《C++远征之封装篇(上)》
老师告诉你能学到什么?
1、对象数组的定义和使用 2、对象成员的定义和使用 3、深拷贝和浅拷贝 4、对象指针、对象引用的定义和使用 5、常对象指针、常对象引用、常成员函数的定义和使用

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!