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、对象得动态创建和释放
(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;
}
上一篇: 头条2018实习生笔试
下一篇: 对象存活与引用