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(); }