zoukankan      html  css  js  c++  java
  • 游戏开发实验室的内部讲座总结----c++

    

    第三节  动态内存分配newdelete

     

    经过调试设置断点,发现new 函数事实上还是调用的malloc函数。

     

    第四节  引用

     

    一个变量是能够有多个引用的,引用也是能够传递的。  常量是不能有引用的。

     

    当引用作为函数的返回值时。例如以下的样例//

     

        int &add(int &a,int &b)     //返回的是a的引用到内存中//

        {

            a=a+b;

            return a;

        }

    void main ()

    {

        int i,j;

        i=1;

        j=2;

        int &k=add(i,j);      //这是引用的传递了,  是内存的值,可是是a的引用//

        k=888;

        printf("i=%d,j=%d,k=%d",i,j,k);

    }

    //执行结果: i=888,j=2,k=888

     

     

    第五讲  初始化函数形參(就是有默认值)

     

    这样的默认的形參,必须是从右往左且不能有间隔(就是无默认值)的

     

    有了默认形參,在函数的调用时,就同意了,少赋值几个參数(就是用默认值了被)

     

     

     

    第六讲  异常抛出与捕获及处理

    三个keyword:

    try -----------标识可能出现的异常代码段;

    throw----------抛出一个异常;(必须在try代码块中,其后面的值决定了抛出异常的类型,类似switch--case

    catch-----------标识处理异常的代码段;(会有多个,类似switch--case

    提示:

    使用异常处理将带来很多其它的系统的开销,因此慎用异常//

     

     

     

    第七讲  函数重载

     

    条件:函数名同样,可是:函数的參数类型不同(用函数模板最好了),或者參数个数不同。

     

    数组a的长度(元素的个数)是:sizeof(a)/sizeof(int)

    int a[6]={1,2,3,4,5,6};

     

     

    第八讲  函数模板

    使用函数模板能够简化形參个数同样,而类型不同的函数;

     

    函数模板的使用:

    Template < typename  T>  //能够用class 替换 typename

     

    样例:  求数组中 元素最大值的函数;

     

    template <typename S>

    S max(S array[], int len )

    {

        S imax=0 ;

        for (int i=0;i<len;i++)

        {

            if (array[i]>imax)

            {

                imax= array[i];

            }

        }

        return imax;

    }

    int _tmain(int argc, _TCHAR* argv[])

    {

        int a[6]={1,2,3,4,5,6};

        float b[5]={1.0f,2.0f,3.3f,5.5f,4.4f,};

        printf("数组a最大值为%d ",max(a,sizeof(a)/sizeof(int)));

        printf("数组b最大值为%f",max(b,sizeof(b)/sizeof(float)));

        getchar();

        return 0;

    }

     

     

    第九讲  类的初识

     

    构造函数:

    成员函数的实例化位置,在类中直接完毕就是内敛函数了。  正常应该是在类的外面完毕的。

     

    类的声明是在  .h文件里,类的实现是在.cpp文件里。  主函数在一个 .cpp文件里

     

    vs中新建这些类,   能够用提供的菜单功能。简单。(函数也是能够的)

    第十二讲  訪问类的私有成员

    类的私有成员:

    private声明的变量或者函数。  仅仅能在本类中使用,不能在其它类或者本类以外的位置调用、訪问。  

    public 定义的变量或者函数能够在 整个程序中调用訪问。

     

     

    訪问类的私有成员(读取):

         能够通过定义本类的 成员函数,来訪问本类的成员变量。

     

    Inline 内敛函数:

    内敛函数的声明?????????????

     

    函数实现时,假设不是在类中,  那么也要和类的声明在同一个文件里。

     

    第十三讲  默认赋值构造函数

     

    三种情况:

    1、类的对象 赋值初始化另外的类对象(类肯定是一个了)

    2、函数的  參数传递(类对像之间)

    3、函数的返回值 是类的对象。

     

     

    第十四讲  友元函数

    友元函数是指某些尽管不是类成员却可以訪问类的全部成员的函数。通常同一个开发人员会出于技术和非技术的原因,控制类的友元和成员函数(否则当你想要更新你的类时,还要征得其它部分的拥有者的允许)。

     

    在类中声明这个友元函数:

    friend + 函数的声明格式;

     

     

    程序中的内存:(大小是以字节B为单位的)

    (大)堆 malloc new

    (小)栈 函数

     

    C语言中的指针:多用于下面的内容

     Int m_nSize=…;

     Int * pNum= (int *) new BYTE[m_nSize];   //字节//

    pNum[10]=…….

     

     

    赋值为NULL0的指针,声明时是有类型的,仅仅是不指向不论什么有效的地址。

    Void类型的指针,能够指向不论什么类型。

     

    第十五讲  this指针(差点儿全部面向对象语言都有,我眼下接触的是这样)

    this指针能够看成是实例化对象的地址。在类成员函数里訪问成员变量,事实上也隐含使用了this指针。

     

    一个问题:

    class Tdate

    {

    int Year;

    intMonth;

    intDay;

     

    public:

    Tdate(intYear,int Month,int  Day) 

    {

             Year= Year;     //这里是有问题的:  我们想给类的成员变量赋值,可是对不把。

             Month= Month;

             Day= Day;

    }

    };

    更改例如以下:

    Tdate(int Year,int Month,int  Day) 

    {

             this->Year=Year;     //这里是有问题的:  我们想给类的成员变量赋值,可是对不把。

             this->Month=Month;

             this->Day=Day;

    }

     

    第十六讲  类的const对象

    1. 类的const对象

    const意味着仅仅读,意味着所标识的类成员变量不能出如今=号的左边;构造、析构函数除外。

    这种类对象,仅仅能訪问const修饰的成员函数,其它成员函数訪问不了。

    class Tdate;

     

    const Tdate dt(1998,8,19);

     

    1. const修饰成员函数(实现和声明都要有!const

    const放在函数的尾部。不能修饰构造函数。

     

    第十七讲  类的对象数组

    我们声明类对象的数组,与我们声明内置类型(ing,float)数组的方式全然同样。

     

    int b[3];

    Tdate d[2];   调用默认构造函数了。

     

    int b[3]={1,2,3};

    Tdate d[2] ={Tdate(1999,1,29),Tdate(2000,3,45)};    //用构造函数呗

    Tdate d[10]={Tdate(1999,1,29),Tdate(2000,3,45)};  //后面没有赋值的8个调用了构造函数了。

     

     

    第十八讲  类静态数据成员(是属于类的,能够用类::訪问)

    静态成员的提出是为了解决数据共享的问题。实现数据共享有很多的方法,如:设置全局性的变量或者对象是一种方法。可是,全局变量或对象是有局限性的。这一课,我们主要讨论用类的静态成员了来实现对象间的数据共享。

    一、类静态数据成员

    1. 静态数据成员在定义或说明时前面加keywordstatic

    2. 静态成员初始化与一般数据成员初始化不同。其格式例如以下:

    <数据类型><类名>::<静态数据成员名>=<>

    3、静态数据成员是静态存储的,他是静态生存期,必须对它进行初始化。

    4、引用静态数据成员时,採用例如以下格式:

    <类名>::<静态成员名>;

     

    比如,能够用类的静态成员函数存放用于存放类的实例化次数(对象个数)

    哪怕没有对象的实例也是能够訪问的。

    二、类静态成员函数

    静态成员函数内不能使用非静态类成员数据。

    类成员函数能够独立使用。

    能够使用类+作用域解析符调用静态成员函数,如Tdate::staticFun();

    最好把成员函数的实现放在.cpp里边,以防止反复定义。(由于.h文件可能被多次的引用)。静态的东西被多次的编译是会出错的。

     

    第十九讲  类对象指针

     

    定义类对象的指针:

    Tdate d1; //对象

    Tdate *p1 = &d1;

    Tdate *p2 = (Tdate *)malloc(sizeof(Tdate));

    Tdate *p3 = new Tdate;

     

     

    假设:我

    Tdate * p = NULL;   

    Int n=p-> year;   //没有指定的存储空间,非法了,除非 year是静态类型的变量。

     

     

     

  • 相关阅读:
    HTML-图片和多媒体
    HTML弹性布局
    HTML定位——绝对定位和相对定位、固定定位
    HTML定位和布局----float浮动
    CSS层叠
    HTML-css样式引用方式
    认识HTML和CSS
    原生js 进度条
    原生js文字滚动 滚动条
    时间轴
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/3963165.html
Copyright © 2011-2022 走看看