C++学习(5)

#学习自用#

静态

局部静态

在讲局部静态前,我们要了解变量的生命周期,在一个函数内的定义变量称为局部变量,这个变量的生命周期仅在函数执行期间,函数执行结束后这个变量就会被销毁。而函数内部的静态变量会一直存在于程序的整个生命周期中,程序结束时才会被销毁,静态变量只会初始化一次。

#include<iostream>
using namespace std;
void add()
{
	static int p=0;
	p+=1;
	cout<<p<<endl;
}
void main()
{
	int i=0;
	add();
	add();
	cin.get();
}

如果去掉static 两次打印的结果均为1,这里虽然p在函数结束后没有被销毁,因为p的生命周期是从第一次定义开始到程序结束,所以打印结果为1和2;但是在第二个add处添加断点进行调试,内存中却看不到p的地址(希望有大佬能解释一下为什么看不到地址)。

枚举

枚举是将一组整数值集合作为类型,第一个数默认为0,往后依次递增1。

#include<iostream>
using namespace std;

enum example: unsigned char
{
	A,B,C=3,d
};

void main()
{
	cout<<A<<endl;
	cout<<B<<endl;
	cout<<C<<endl;
	cout<<d<<endl;
	cin.get();
}

如果变量有赋值,该变量值改变,往后按改变后的值依次递增1,所以输出0,1,3,4 。枚举类型默认整型,如果变量数值不大就没有必要用32位的整型,将其改为8位整型可以节省内存。

构造函数

构造函数是一种特殊类型的方法,每次构造一个对象时都会被调用,它没有返回值类型,其名必须与类的名称相同,如果不实例化对象构造函数就不会运行。构造函数的特性对于初始化来说比较方便。

#include<iostream>
using namespace std;
class player
{
public:
	float x,y;
	
	player(float i, float j )
	{
		x=i;
		y=j;
	}
	player()
	{
		x=0;
		y=0;
	}
	void print()
	{
		cout<<x<<endl;
		cout<<y<<endl;
	}
};
void main()
{
	player p1(1.0f,1.0f);
	player p2;
	p1.print();
	p2.print();
	cin.get();
}

一个类中可以有多个构造函数,但多个构造函数名称相同,所以必须保证参数不同才能区分不同的构造函数,例子中p1调用了第一个构造函数,p2调用第二个。

析构函数

析构函数是在销毁对象时运行,用于清理使用过的内存。在构造函数中进行了数据初始化,如果不清理可能会导致内存泄漏。~类名称即为解析函数。

继承

两个不同的类,但是有许多相同的公共部分(变量,函数),就可以通过继承去减少代码的重复。

比如:游戏中的子弹,需要有位置信息,有移动;对于玩家同样需要位置信息,需要可以移动,还需要游戏id。

class cartridge
{
public:
	float x,y;
	void move(float i,float j)
	{
		x+=i;
		y+=j;
	}
};
class player:public cartridge
{
	const char* name;
};

player中就包含了cartridge中的变量以及函数。

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值