欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-03-12 15:45:56
...

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、对象得动态创建和释放
c++のstatic静态成员、对象的动态创建和释放
(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;
}