为了账号安全,请及时绑定邮箱和手机立即绑定
  • 1、为什么需要const成员函数? 我们定义的类的成员函数中,常常有一些成员函数不改变类的数据成员,也就是说,这些函数是"只读"函数,而有一些函数要修改类数据成员的值。如果把不改变数据成员的函数都加上const关键字进行标识,显然,可提高程序的可读性。其实,它还能提高程序的可靠性,已定义成const的成员函数,一旦企图修改数据成员的值,则编译器按错误处理。 const成员函数和const对象

    2、1. 常对象只能调用常成员函数。 2. 普通对象可以调用全部成员函数。 3. 当对一个对象调用成员函数时,编译程序先将对象的地址赋给this指针,然后调用成员函数,每次成员函数存取数据成员时,由隐含使用this指针。 4. 当一个成员函数被调用时,自动向它传递一个隐含的参数,该参数是一个指向这个成员函数所在的对象的指针。

    查看全部
  • 1、const对象是一旦被构造出来,其值就不能被改变了。而构造初始化列表就是用来构造成员变量的,对const成员来说,初始化列表中提供的值就作为构造它们的初值。所以这里并不是赋值操作。

    2、用const修饰对象成员,对象成员就变成了常对象成员 用const修饰成员函数,成员函数就变成了常成员函数。const要放在函数的最后, 一旦初始化就不能再修改,const就是干这个的,长对象成员用初始化列表初始化 函数里看着没有参数,实际上隐藏着this指针。常成员函数中隐藏的是常this指针,常指针指向的数据不允许被修改 例如:void Coordinate::changeX(){m_iX = 10;}即为void Coordinate::changeX(Coordinate *this){this->m_iX = 10;} void Coordinate::changeX()const{m_iX = 10;}即为void Coordinate::changeX(const Coordinate *this){this->m_iX = 10;}这里的m_iX = 10;的写法是错误的,this已经是常指针,通过常指针是无法修改值的 void changeX();与void changeX() const互为重载 要调用const修饰的常成员函数,实例化对象时,必须用const来修饰对象,const写在最前面


    查看全部
  • this指针的作用就是:解决了参数和数据成员重名的问题,让计算机清楚是参数传给了数据成员; this指针一般都是系统默认调用,以防止在实例化对象调用成员函数的时候出现错误,保证一一对应,当数据成员和构造函数中的形参名字相同是,计算机会分不清楚谁给谁赋值,这是需要人工加上this指针,用来区别。

    查看全部
  • this指针代表本对象的地址,编译时,编译器自动为每个成员函数添加this指针参数,从而,程序员可不用显示写出this参数。 this指针:指向对象自身数据的指针。 Array arr1 : this <=> &arr1 Array arr2 :this <=> &arr2

     0


    查看全部
    0 采集 收起 来源:[C++]this指针

    2018-06-26

  • 对象成员:一个对象作为另外一个类的数据成员

    对象成员指针:一个对象的指针作为另外一个类的数据成员

    1.对象成员指针的定义: 类名 * 指针名 是指针而不是对象

    2.若存在对象成员指针1,2……。sizeof(指针1,指针2……)只计算各指针所

    占内存的总和,不计算对象成员所占内存

    对象成员指针如果在构造函数用 new 的方式从堆中申请内存实例化2个

    Coordinate 对象,那这2个对象都是在堆中,而不在 Line 对象中,因为每个指

    针占 4 个内存单元,因此 sizeof(Line) 只占 8 个内存单元,销毁 Line 的时

    候,先销毁队中的内存,在释放 Line 本身的内存


    查看全部
  • 1.对象指针:类名 * 指针名  = new 类名 2.C语言的malloc与C++的new都具有申请新内存空间的作用,但是new会调用对象的构造函数,而malloc不会调用 3. C++在new时的初始化的规律可能为:对于有构造函数的类,不论有没有括号,都用构造函数进行初始化;如果没有构造函数,则不加括号的new只分配内存空间,不进行内存的初始化,而加了括号的new会在分配内存的同时初始化为0。

    查看全部
    2 采集 收起 来源:[C++]对象指针

    2018-06-26

  • 关于 深拷贝与浅拷贝需要知道的基本概念和知识: (1)什么时候用到拷贝函数?  a.一个对象以值传递的方式传入函数体;  b.一个对象以值传递的方式从函数返回;  c.一个对象需要通过另外一个对象进行初始化。 如果在类中没有显式地声明一个拷贝构造函数,那么,编译器将会自动生成一个默认的拷贝构造函数,该构造函数完成对象之间的位拷贝。位拷贝又称浅拷贝 如果一个类拥有资源,当这个类的对象发生复制过程的时候,资源重新分配,这个过程就是深拷贝

    查看全部
  • 1、

    如果数据成员里面不包含指针的话用浅拷贝即可<br> 如果数据成员里面包含指针的话,那就需要用到深拷贝,即为该指针在堆上开辟一块内存,并且将另外一个对象的数据全部赋给这个对象的数据成员

     2、浅拷贝和深拷贝的区别在于:如果对象中有初始化指针,那么浅拷贝会将两个不同对象的指针指向一个相同的地址,在释放内存的时候会发生不可预计的错误。而深拷贝则将两个不同对象的指针分别指向不同的地址,不会出现浅拷贝所引发的错误

    3、地址拷贝-----浅拷贝 值拷贝-------深拷贝


    查看全部
  • 实例化对象A时,如果对象A有对象成员B,那么先执行对象B的构造函数,再执行A的构造函数。

    C如果对象A中有对象成员B,那么销毁对象A时,先执行对象A的析构函数,再执行B的析构函数。

    D如果对象A中有对象成员B,对象B没有默认构造函数,那么对象A必须在初始化列表中初始化对象B。


    查看全部
    0 采集 收起 来源:练习题

    2018-06-25

  • 1、理论上是在main函数所在的cpp文件对应的头文件中添加比较正规,但是实际应用的时候都是直接在main函数所在的cpp文件中直接添加用到的函数所在的头文件(h)。正常是不会包括cpp文件的,不然预编译的时候全部展开,代码太冗长了。

    2、实例化Line对象时,先实例化Coordinate对象点A和点B,实例化点A和点B时,会自动调用构造函数,程序中如果只有构造函数Coordinate(int x,int y)时,调用时必须传递参数,否则会报错。但如果加上默认构造函数Coordinate()时,没有参数传递时就会调用Coordinate()这个函数,就不会报错了。

    查看全部
  • 当没有自己定义的时候,系统都会自动生成。但是系统生成的构造函数和析构函数是空函数,没有实际作用。定义构造函数可以发给类成员设置默认值等等,同样的,如果我们的类数据成员包含了从堆中申请的内存,类的析构函数就应当加入包含释放堆中内存的语句。或者我们需要程序在对象解散时在屏幕上输出提示信息,也可以在类的析构函数中加入提示信息。

    查看全部
    0 采集 收起 来源:[C++]对象成员

    2018-06-25

  • .作为一个运算符,两个运算对象分别为变量和变量,->则是地址和对象。所以你要写*p.coor或者p->coor。因为p是一个指针,指针的值是一个地址,然而*p就是p指向的那个变量。

    查看全部
  • (1)常对象只能调用常成员函数(最后面加const),或是公用的常数据成员 

    (2)私有的常数据成员,初始化要用成员初始化列表 

    (3)常成员函数,本质就是把this指针指向的变量变为常量,所以形如这样:this->a = 10;是错误的,因为this指向的量a是一个常量,不可以更改值。所以在常成员函数体中是不可以更改this指针指向的数据成员的值的

    (4)常成员函数中也不能调用普通成员函数,但是可以访问到私有的数据成员


    查看全部
  • 在栈上实例化对象不需要手动销内存,系统自动回收。https://img1.sycdn.imooc.com//5b29cb910001eaf419201080.jpg

    查看全部
    0 采集 收起 来源:练习题

    2018-06-20

  • delete []p;如果销毁的时候没有加  []  那么销毁的只是第一个元素

    查看全部

举报

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

微信扫码,参与3人拼团

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

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