您的位置:首页 > 编程语言 > C语言/C++

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

2017-09-18 20:59 429 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息