为了账号安全,请及时绑定邮箱和手机立即绑定
  • main.cpp
    
    #include <stdlib.h>
    #include <string>
    #include "MyArray.h"
    using namespace std;
    
    /*******************
    类模板:
     定义类模板MyArry
     成员函数:构造函数、析构函数、display函数
     数据成元:m_pArr
     *******************/
    
    //使用MyArray这个类
    int main(void){
        MyArray<int,5,6> arr;//实例化一个对象
        arr.display(); 
        return 0;
    }
    MyArry.h:
    //
    
    
    #ifndef UNTITLED_MYARRAY_H
    #define UNTITLED_MYARRAY_H
    
    
    
    #include <iostream>
    using namespace std;
    
    //必须将类的声明和类的定义写在同一个.h文件中
    
    template <typename T,int KSize,int KVal>//类的前面一行写上
    class MyArray
    {
    public:
        MyArray();
        ~MyArray()
        {
            delete []m_pArr;
            m_pArr = NULL;
        }
        void display();
    
    private:
        T *m_pArr;
    };
    
    template <typename T,int KSize,int KVal>
    MyArray<T,KSize,KVal>::MyArray()
    {
        m_pArr = new T[KSize];//在构造函数中定义m_pArr为一个T型数组
        for(int i = 0;i < KSize;i++){
            m_pArr[i] = KVal;
        }
    }
    //
    //template <typename T,int KSize,int KVal>//每一个函数定义前都要加
    //MyArray<T,KSize,KVal>::~MyArray()//类名后要加<参数的名字>,然后开始相关定义
    //{
    //    delete []m_pArr;
    //}
    
    template <typename T,int KSize,int KVal>
    void MyArray<T,KSize,KVal>::display()
    {
        for(int i = 0;i < KSize;i++)
        {
            cout << m_pArr[i] << endl;
        }
    }
    #endif //UNTITLED_MYARRAY_H


    查看全部
  • C++中的类模板:

    各种类很多地方重复,只有数据类型不一样时,用到类模板

    定义的方法:

    template <class T>
    class MyArray{
    public:
       void display(){}
    private:
       T *m_pArr;//用T定义了一个数据成员的指针
    }

    但在类外定义个一个成员函数时:

    template <class T>//每定义一个成员函数都需要在前面加这么一行代码
    void MyArray<T>::display(){
       ...
    }

    在使用时,实例化一个对象需要在类名后边加<>:

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

    类模板中多个参数的使用情况:

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

    使用的时候,而且类外定义时:

    http://img1.sycdn.imooc.com//5e34f6330001b36d12620714.jpg使用时:

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

    特别提醒:模板代码不能分离编译

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

    2020-02-01

  • #include <iostream>
    using namespace std;
    
    /**
     * 定义模板函数swapNum
     * 实现功能:交换两个数的位置
     */
    template <typename T>
    void Swap(T &a, T &b)
    {
       T temp = a;
       a = b;
       b = temp;
    }
    
    int main(void)
    {
       int x = 10;
       int y = 20;
       // 调用模板函数
       Swap<int>(x,y);
       cout << "x = " << x << endl;
       cout << "y = " << y << endl;
       return 0;
    }
    Swap注意大写,不要和标准库的swap冲突。


    查看全部
    0 采集 收起 来源:单元巩固

    2020-02-01

  • //函数模板的定义及使用方法
    #include <iostream>
    #include <stdlib.h>
    using namespace std;
    /*************************/
    /*函数模板
       要求定义函数模板display
       */
    /*************************/
    template <typename T>
    void display(T a){
       cout<<a<<endl;
    }
    
    //定义有两个参数的函数模板
    template<typename T,class S>
    void display(T t,S s){
       cout<<t<<endl;
       cout<<s<<endl;
    }
    
    //定义有两个参数的函数模板,其中一个参数为类型参数,一个为变量,这个变量在实例化时就变成一个常量
    template<typename T,int KSize>
    void display(T a){
       for(int i = 0;i < KSize; i++){
          cout << a << endl;
       }
    }
    
    int main(void){
       display<double>(10.98);
       display<int>(10);
       display<int,double>(5,8.3);
       display<int,5>(6);
       return 0;
    }
    /Users/gaoyuli/CLionProjects/untitled/cmake-build-debug/untitled10.981058.366666Process finished with exit code 0


    查看全部
  • 为什么要有模板:

    int max(int a,int b){return (a>b)?a:b;}
    int max(float a,float b){return (a>b)?a:b;}
    int max(char a,char b){return (a>b)?a:b;}
    //除了类型不一样其他逻辑都一样
    方案:把类型作为参数传进计算机
    
    
            关键字:template 模版 typename class 作用相同,这里的class不是定义类的,而是表明数据类型的。
    当要定义一个函数模板:

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

    通过template来声明一个函数的模板,通过class或者typename来声明一个参数,参数表示类型:

    具体使用:

    第一行是计算机自动判断

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

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

    如果不使用函数模版时,不产生代码,因为计算机也不知道具体实例化怎样的函数

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

    变量作为模板的参数:

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

    多参数函数模板:

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

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

    函数的模板与重载:

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

    当我们使用时,通过三个不同的函数模板可以实例化出三个不同的模板函数,这三个模板函数之间就形成了重载关系,只有使用函数模板时,产生出真正代码后,才能称得上是2重载关系。

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

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

    2020-01-31

  • 运算符重载:给原有运算符于新的功能

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

    另一个例子:

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

    +号本身并没有这个功能<<也是

    运算符重载的本质:函数重载

    后略


    查看全部
  • 关键字:static 静态

    静态数据成员,静态成员函数:

    静态数据成员不依赖于是否实例化而存在,所以不在构造函数中进行实例化,其实例化往往是单独进行的,其初始化不要加static;

    而普通数据成员则只能在类实例化为对象之后才存在。

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

    访问坦克数量的方法有两种:1.不通过对象,直接通过类2.可以定义对象,加.号的方式:

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

    在内存中,静态数据成员和普通数据成员的区别:

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

    若一个对象都不产生的话,若用静态的成员函数调用普通的数据成员或成员函数,则会报错。(因为还没产生)

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

    从this指针谈静态成员函数:

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

    7:38后不太懂,先略过:

    查看全部
    0 采集 收起 来源:[C++]静态

    2020-01-31

  • 友元类的定义及使用方法:

    可以在Circle类中定义Coordiate的对象,并且可以在Circle类中任意使用Coordinate类的成员和成员函数:

    http://img1.sycdn.imooc.com//5e34101e0001745508540824.jpghttp://img1.sycdn.imooc.com//5e3410280001007912620816.jpg

    关于友元的注意事项:

    友元关系不可传递

    友元关系的单向性

    友元声明的形式:函数、类及数量不受限制

    友元只是封装的补充,不是一个很好的语法


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

    2020-01-31

  • 不急,未做笔记

    查看全部
  • 友元函数:全局函数,成员函数

    友元全局函数:

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

    友元函数传入对象或引用,传引用效率更高,使用的时候直接传入对象的名称即可,如图:


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

    友元成员函数:将一个类的成员函数声明为另一个类的友元:

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

    使用方法,将Circle的printXY声明为Coordinate的友元,那么可以在Circle的printXY使用时可以使用Coordinate的私有数据成员了,友元的方便之处便在于此:

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

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

    2020-01-30

  • 映射的截图

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

    查看全部
  • 链表

    特点:数据插入速度快

    查看全部
  • 迭代器的使用

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

    查看全部
  • 标准模板库

    http://img1.sycdn.imooc.com//5e22d49000010e2e19201080.jpghttp://img1.sycdn.imooc.com//5e22d4ad0001ccec19201080.jpg

    查看全部
  • 函数模板里的class表示的是数据类型

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

    2020-01-18

举报

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

微信扫码,参与3人拼团

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

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