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

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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值