为了账号安全,请及时绑定邮箱和手机立即绑定
  • 类模板:一个参数

    // 声明
    template<class T>
    class MyArray
    {
    private:
        T *m_pArr;
    }
    // 定义
    // template 和 lei<T> 共同唯一定义了该方法
    template<class T>
    void MyArray<T>::display()
    { ... }
    // 使用
    MyArray<int> arr; // 初始化时也要传递<T>的类型
    arr.display();


    查看全部
    0 采集 收起 来源:[C++]类模板

    2019-03-02

  • 多变量作为模板参数

    template <typename T,typename C>
    void display(T a,C b)
    {
        cout << a << " " << b << endl;
    }

    等于以下

    template<typename T,class U>
    T minus(T* a,U b);

    混用

    template <typename T,int size>
    void display(T a)
    {
        cout << size <<endl;
    }


    查看全部
    0 采集 收起 来源:[C++]函数模板

    2019-03-02

  • 变量作为模板参数

    template <int size>
    void display()
    {
        cout << size << endl;
    }
    // 使用
    display<10>();


    查看全部
    0 采集 收起 来源:[C++]函数模板

    2019-03-02

  • template<typename T> 的定义方法,和 class 的基本类似

    查看全部
    0 采集 收起 来源:[C++]函数模板

    2019-03-02

  • 函数模板

    template <class T>
    T max(T a,T b)
    {
        return (a > b)?a:b;
    }


    查看全部
    0 采集 收起 来源:[C++]函数模板

    2019-03-02

  • [] 运算符

    // 声明
    int operator[](int index);
    // 定义
    int Coordinate::operator[](int index)
    {
        if(0 == index)
        {return m_iX;}
        if(1 == index)
        {return m_iY;}
    }
    // 使用
    cout << coor[0]; // 相当于 coor.operator[](0);


    查看全部
  • << 运算符重载:

    friend ostream& operator<<(ostream &out,const Coordinate &coor)
    {
        out << coor.m_iX << "," << coor.m_iY;
        return out;
    }
    // 使用
    cout << coor; // 相当于 operator<<(cout,coor);


    查看全部
  • + 号成员函数实现:

    Coordinate operator+(Coordinate &coor1,Coordinate &coor2)
    {
        Coordinate temp;
        temp.m_iX = coor1.m_iX + coor2.m_iX;
        temp.m_iY = coor1.m_iY + coor2.m_iY;
        return temp
    }


    查看全部
  • + 号成员函数重载:

    声明:
    Coordiante operator+(const Coordiante &coor);
    定义:
    Coordinate operator+(const Coordinate &coor)
    {
        Coordinate temp;
        temp.m_iX = this->m_iX + coor.m_iX;
        temp.m_iY = this->m_iY + coor.m_iY;
        return tem;
    }
    // 使用
    Coordinate coor1(1,2);
    Coordinate coor2(2,3);
    Coordinate coor3(0,0);
    coor3 = coor1 + coor2; // 相当于: coor1.operator+(coor2);


    查看全部
  • Coordinate &Coordinate::operator-()

    {

        m_iX = - m_iX;

        this->m_iX = -this->m_iX;

        return *this; // 别忘了星号

    }

    查看全部
  • 前置++ 和 后置++

    - 前置++

         - 与成员函数重载一致

    - 后置++

    Coordinate operator++(int); // 返回对象,而不是引用;传入的 int 只是一个标志,不使用
    // 定义
    Coordinate operator++(int)
    {
        Coordinate old(*this);
        m_iX++;
        m_iY++;
        
        return old; // return 的是 old,保证后置++当前返回的不变,而 this 指向的已变
    }
    // 即
    Coordinate coor1(3);
    coor1++; // coor1.operator++(0)


    查看全部
  • 友元函数重载:

    friend Coordinate& operator-(Coordinate &coor);

    实现

    Coordinate& operator-(Coordiante &coor) // 传了一个引用进来
    {
        coor.m_iX = -coor.m_iX;
        
        return coor; // 视频错误写完 *this
    }
    //调用
    Coordiante coor1(3);
    -coor1; // operator-(coor1);


    查看全部
  • 成员函数重载:

    Coordinate& operator-();
    有隐形 this 指针
    Coordinate& Coordinate::operator-()
    {
        m_iX = -m_iX;
        return *this;
    }
    使用
    Coordinate coor1(3);
    -coor1; // 等价于coor1.operator-();


    查看全部
  • Tank t1("a");
    cout << t1.getCount() << endl; // 11
    // or 
    Tank.getCount();
    // 析构测试
    
    Tank *t1 = new Tank("a");
    cout << Tank::getCount() << endl;
    Tank *t2 = new Tank("b");
    cout << t1->getCount() << endl;
    delete t1;
    delete t2;
    cout << Tank::getCount() << endl;
    查看全部
  • 在调用的时候,可以直接用 Tank.getCount() 来执行 static 函数

    查看全部

举报

0/150
提交
取消
课程须知
学习本课程需要有一定的C语言和C++语言基础。如基础不太扎实的同学可以,参与C++远征攻略的学习计划,友情链接 http://www.imooc.com/course/programdetail/pid/42
老师告诉你能学到什么?
1、友元函数及友元类的定义及使用方法 2、静态数据成员和静态成员函数的定义及使用方法 3、运算符重载的技巧 4、函数模板和类模板的定义及使用方法 5、标准模板库的使用方法及基本原理

微信扫码,参与3人拼团

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

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