c++のstatic静态成员、对象的动态创建和释放

来源:互联网 发布:封装windows 10 1709 编辑:程序博客网 时间:2024/06/05 16:54

1、静态成员变量
(1)核心思想
静态成员变量的初始化必须在类的外部,也可以通过对象直接进行赋值;
静态函数的只能使用静态成员变量,不能使用其他普通的成员变量;
(2)代码例子边看边讲解

#include <stdio.h>class Test11{public:    Test11 (int b)    {        m_b = b;    }    void print()    {        printf ("m_a = %d, m_b = %d\n", sm_a, m_b);    }    // 静态成员函数只能使用静态成员变量    static void printA()    {    //  printf ("m_a = %d, m_b = %d\n", sm_a, m_b);        printf ("m_a = %d\n", sm_a);    }public:    // 静态成员变量,属于类,不属于某个对象    // 是所有对象共享的,静态是在数据区分配,只有一个备份    // 静态变量不能由某个对象进行初始化    // 静态变量必须在类的外部重新定义并且初始化    static int sm_a;     int m_b;};// 重新定义类的静态变量并且初始化int Test11::sm_a = 100;   int main11_1(){    Test11 t(10), t2(20), t3(30);    t.print();    // 类的静态变量的使用    // 1、通过某一个对象进行引用    t2.sm_a = 30;    t.print();    // 2、通过类名来引用    Test11::sm_a = 60;    t3.print();    Test11::printA();    return 0;}

2、对象得动态创建和释放
这里写图片描述
(1)、先看看普通变量的创建和释放:
int * p = new int(10)——》delete p
int *p = new int [10]——>delete [10]
(2)、小方法
用new分配数组空间时不能指定初值。如果由于内存不足等原因而无法正常分配空间,
则new会返回一个空指针NULL,用户可以根据该指针的值判断分配空间是否成功。

(3)、看代码

#include <stdio.h>#include <stdlib.h>//申请普通变量int main7(){    //普通创建动态变量和释放    int *p = (int *)malloc(sizeof(int));    free(p);    //c++创建动态变量和释放,new+类型    int *p1 = new int;    *p1 = 10;    printf("%d\n",*p1);    delete p1;//释放空间    //new可以在申请动态变量的空间的时候进行初始化    int *p2 = new int(10);    printf("%d\n",*p2);    delete p2;    return 0;}//申请数组int main72(){    //c方法    int *p = (int *)malloc(sizeof(int)*10);    free(p);    //c++new方法    int *p1 = new int[10];    delete[]p1; //格式注意了!!    return 0;}//动态创建对象class Test12{public:    Test12(int a, int b)    {        m_a = a;        m_b = b;        printf ("构造函数\n");    }    ~Test12()    {        printf ("析构函数\n");    }private:    int m_a;    int m_b;};int main(){    Test12 *p = (Test12*)malloc(sizeof(Test12));    free(p);    // new 在创建对象的时候会自动构造函数进行对象的构建    Test12 *p1 = new Test12(10,20);    // delete在进行释放对象的时候会自动调用析构函数进行对象资源的回收    delete p1;    return 0;}
阅读全文
0 0
原创粉丝点击