C++笔记:静态成员函数和静态成员变量的使用


前言


静态成员的访问和静态成员变量的地址

#include <iostream>
using namespace std;
class Car {
public:
	int m_age;
	static int m_price;
	static void run(int m_price) {
		cout << "run(int m_price):" << m_price << endl;
	}
	 
};
int Car::m_price = 0;
class BigCar : public Car{

};
int main()
{
	//通过对象访问
	Car car;
	car.m_price = 100;
	car.run(car.m_price);

	//通过对象指针访问
	Car* p = new Car;
	p->m_price = 200;
	p->run(p->m_price);

	//通过类名访问
	cout << & Car::m_price << endl;
	cout << &BigCar::m_price << endl;

	cout << &Car::m_price << endl;
	cout << &BigCar::Car::m_price << endl;


	return 0;
}

out为

run(int m_price):100
run(int m_price):200
007CC3D4
007CC3D4
007CC3D4
007CC3D4

一个对象计数的问题

#include <iostream>
using namespace std;
class Car {
private:
	static int ms_count;//static只有一份内存;private在类外无法访问
public:
	Car() {
		ms_count++;
	}
	~Car() {
		ms_count--;
	}
	static int getCount() //加static后可以通过类名访问
	{
		return ms_count;
	}
};
int Car::ms_count= 0;

Car car;

int main()
{
	//通过对象访问
	Car car0;
	

	//通过对象指针访问
	Car* p = new Car;
	

	//通过类名访问
	cout << Car::getCount() << endl;


	return 0;
}

out

3

单例模式

单例模式的作用就是保证类只能创建一个对象
在这里插入图片描述

#include <iostream>
using namespace std;
class Car {
private:
	Car() {}//构造函数私有化	
	~Car() {}//析构函数私有化,防止delete
	static Car* ms_Car; //在类里面创建一个指针对象,尽量不要写成static Car ms_Car
public:
	static Car* sharedCar() {
		if (ms_Car == NULL)
		{
			ms_Car = new Car();

		}
		return ms_Car;
	}
	static void deleteCar()
	{
		if (ms_Car != NULL)
		{
			delete ms_Car;//将堆空间清理掉,但指针仍然有值
			cout << Car::ms_Car << endl;
			ms_Car = NULL;//将指针清空
			cout << Car::ms_Car << endl;
		}
	}
	void run() {
		cout << "run()" << endl;
	}

};

Car* Car::ms_Car = NULL;//将指针对象初始化

int main()
{

	//通过类名访问
	Car* p0 = Car::sharedCar();
	Car* p1 = Car::sharedCar();
	Car* p2 = Car::sharedCar();

	cout << p0 << endl;
	cout << p1 << endl;
	cout << p2 << endl;


	Car::deleteCar();//将堆空间清理掉,但指针仍然有值
	

	return 0;
}


out为

0135B580
0135B580
0135B580
0135B580
00000000
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值