为了账号安全,请及时绑定邮箱和手机立即绑定
  • 被定义为常对象的函数才能调用常成员函数

    查看全部
  • !!!Array 

    return *this;

    返回的是一个临时的新对象,之后对返回值的操作,不会影响到this原本指向的对象。

    但是!

    Array& 

    return *this;

    引用符号&的引入可以改变原this指向的对象.

    查看全部
  • Coordinate coord[3]: 栈的实例化方式,用"."调用;

    Coordinate *p = new Coordinate[3]: 堆的实例化方式,用"p[]."或"p->"调用,一定要delete配套销毁delete []p

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

    2020-02-13

  • Array&  printInfo()
    {
        return *this;    //没有“&”,返回的是一个临时对象
    }

    return *this返回的是当前对象的克隆或者本身(若返回类型为A, 则是克隆, 若返回类型为A&, 则是本身的引用 )

    查看全部
  • 两种实例化用法

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

    2020-02-12

  • 动画控制函数


    查看全部
    1 采集 收起 来源:开篇案例

    2020-02-11

  • 为什么要用Array&呀

    Array& printinfo()

    {

    return *this;

    }     

    为什么要用Array&,直接返回Array不行么

    2015-10-17源自:C++远征之封装篇(下) 4-8845 浏览3 回答

    最佳回答

    2015-10-18

    可以直接返回Array,但这样并不好。

    &这表明返回的是array引用。

    类成员函数有时打算返回类实例自身,就会返回*this的引用。

    而有时并不一定需要返回自身,但仍会选择返回引用,原因如下:

    函数在返回值的时候,是先用你要返回的变量去构造一个临时变量,再将这个临时变量返回给接受返回值的调用者。在调用者使用过后,这个临时变量再被自动销毁。

    如果返回的是一个很大的类实例的话,构造这个临时变量会调用拷贝构造函数,这可能造成很大的运行开销(例子中的情况下array会被整个复制一遍)。为了减少这种负面影响,在一些情况下会选择返回引用类型。注意:这不会改变函数返回时的行为,即——还是会将这个引用临时复制一份——但复制引用类型的开销基本上可以忽略不计。

    但需要万分注意:返回引用类型时必须要保证被引用的变量要在函数退出后仍存在(不然返回的那个引用指向谁呢?!)  当然这个代码中这样用没有问题,因为在调用过后 arr1 肯定还是存在的。


    P.S. 较新的C++11标准中增加了“右值引用”特性,很好地解决了函数返回时临时变量的麻烦。

    54584f6100019caf02200220-80-80.jpg onemoo 

    +3积分什么是积分?

    举报 回复  5

    54584f6100019caf02200220-100-100.jpg

    onemoo

    续上,没看完整个视频,回答得不准确。
    看到视频中在调用过 printinfo 函数后,紧接着又调用了 setLen。
    那么如果是直接返回Array,则调用setLen是调用那个临时变量的setLen,也就是改变的是临时变量的len。 arr1的len不会有任何改变。
    既然目的是要返回类实例自身,就更要将返回类型声明为引用了。

    #12015-10-18 回复 举报


    查看全部
  • C语言中malloc知识单纯的分配内存空间,而new不但会分配内存空间,还会调用对象的构造函数

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

    2020-02-10

  • 走迷宫案例:

    左手原则:想象自己在家左手扶着墙一直走。

    右手原则:想象自己在家右手扶着墙一直走。

    要建立两个类,迷宫类和人

    http://img1.sycdn.imooc.com//5e3fc8180001e9ae05330463.jpg

    http://img1.sycdn.imooc.com//5e3fc84b0001c6ed09320506.jpg

    http://img1.sycdn.imooc.com//5e3fc8c20001f52f10280592.jpghttp://img1.sycdn.imooc.com//5e3fc8df0001e51d11820550.jpg成就感源于克服困难

    查看全部
    0 采集 收起 来源:开篇案例

    2020-02-09

  • http://img1.sycdn.imooc.com//5e3fbfbb00017ab707180627.jpg

    对象的引用与对象的指针。

    对象的常指针与常引用

    http://img1.sycdn.imooc.com//5e3fc1350001f16908420330.jpg

    查看全部
  • 重要,返回引用
    查看全部
  • 未做笔记i

    查看全部
  • 一个对象中包含其他对象:对象成员http://img1.sycdn.imooc.com//5e3294d000018f9410380662.jpg

    至少定义两个类,一个定义点,一个定义线段。

    点的定义:

    http://img1.sycdn.imooc.com//5e3294e10001fdad10860646.jpg线段的定义:其中包括两个点

    http://img1.sycdn.imooc.com//5e3294f30001ae9510760666.jpg实例化一条线段:先实例化A这个坐标点,再实例化B这个坐标点,最后实例化Line,销毁过程与实例化过程正好相反。

    http://img1.sycdn.imooc.com//5e3295090001b82609820718.jpg

    但坐标点类的构造函数应该需要参数:

    http://img1.sycdn.imooc.com//5e3295200001936b10780678.jpg

    http://img1.sycdn.imooc.com//5e32952c0001dbd911120714.jpg

    http://img1.sycdn.imooc.com//5e3295340001b75711500668.jpg

    利用初始化列表:

    http://img1.sycdn.imooc.com//5e3295490001c85b13220628.jpg

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

    2020-01-30

  • delete []p;执行了三次析构函数

    若不加[],则只执行一次析构函数

    查看全部
  • //demo.cpp
    #include <iostream>
    #include <stdlib.h>
    #include <Coordinate.h>
    using namespace std;
    
    int main(void){
        Coordinate coor[3];//从栈
        coor[0].m_iX = 3;
        coor[0].m_iY = 5;
    
        Coordinate *p = new Coordinate[3];//从堆中
        p->m_iX = 7;
        p[0].m_iY = 9;//这样写不要用->,用点号
    
        p++;//p = p + 1;指向了第二个元素
        p->m_iX = 11;
        p[0].m_iY = 12;//此时访问到的是第二个元素
    
        p[1].m_iX = 15;//第三个元素
        p++;
        p->m_iY = 17;
    
        //遍历对象数组
        for(int i = 0; i< 3;i++){
            cout << "coor_x"<<coor[i].m_iX << endl;
            cout << "coor_x" << coor[i].m_iY << endl;
        }
    
        for(int j = 0;j < 3;j++){//区分j和p[]的作用
            cout << "p_x" << p->m_iX << endl;
            cout << "p_y" << p->m_iY << endl;
            p--;
        }
        //注意理解
        p++;
        delete []p;
        p = NULL;
    
        system("pause");
        return 0;
    }


    查看全部

举报

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

微信扫码,参与3人拼团

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

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