C++类与内存

在C++类成员中引用,常量,静态变量,静态函数等,它们被分配在内存的那个地方,有哪些特性。

1.常量和引用必须重载构造函数进行初始化,否则就会编译失败, new 的时候再堆上,直接创建在栈上。值得说明的是:C++类成员常量与C语言常量一样,通过指针可以修改其的值。类的外部常量一旦初始化以后,不会读内存,从代码区的符号表自动生成,

2.静态变量,分配在静态区域,其属于整个类,而不属于具体对象。

3.类的成员函数都在代码区,类的函数都是共享的。另外静态成员函数与对象没有关系。

#include<iostream>
using namespace std;
class Test
{
public:
	int num;
	const int con_num; // new 的时候再堆上,直接创建在栈上
	int & ref_num;// new 的时候再堆上,直接创建在栈上
	static int s_num;//静态区

	//常量和引用必须重载构造函数进行初始化,否则就会编译失败
	Test(int in_ref_num, int in_con_num) :con_num(in_con_num),ref_num(in_ref_num)
	{
		cout << "修改前:" << con_num << endl;
	        int *p = (int *)&con_num;
		*p = 100;
		cout << "修改后:" << con_num << endl;
	}
	static void s_fun()
	{
		cout << "hello s_fun" << endl;
	}
	void fun()
	{
		cout << "hello fun" << endl;
	}
};

 int Test::s_num = 0; //静态成员函数初始化

void main()
{
	// 类名 变量名 //栈上
	//类名 *p = new 类名 //在堆上
	//类的静态成员,静态区
	//类的函数都在代码区,类的函数都是共享的。

	Test test(1, 2);

	void(*p_s_fun)() = &Test::s_fun;//静态成员函数,与对象无关

	void(Test::*p_fun)() = &Test::fun;//代码共享,所有的类对象共享对象,

	 p_s_fun();//使用函数指针,直接调用类的静态成员函数
	(test.*p_fun)(); //通过函数指针访问类的成员函数,必须使用具体对象调用

	cin.get();

}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值