非静态成员函数 静态成员函数为什么不能访问本类中的非静态成员?
浏览量:1740
时间:2021-03-14 06:17:55
作者:admin
静态成员函数为什么不能访问本类中的非静态成员?
程序最终都将在内存中执行,变量只有在内存中占有一席之地时才能被访问。类的静态成员(变量和方法)属于类本身,在类加载的时候就会分配内存,可以通过类名直接去访问;非静态成员(变量和方法)属于类的对象,所以只有在类的对象产生(创建类的实例)时才会分配内存,然后通过类的对象(实例)去访问。在一个类的静态成员中去访问其非静态成员之所以会出错是因为在类的非静态成员不存在的时候类的静态成员就已经存在了,访问一个内存中不存在的东西当然会出错:class CA{private:int a //非静态成员,创建类的实例时分配内存,类的不同实例对应不同的内存区域
静态成员和非静态成员的区别?
非静态成员也叫成员变量,二者区别如下 :1、名称上的区别成员变量也叫实例变量;静态变量也叫类变量。2、内存存储的区别成员变量存储到堆内存的对象中,静态变量存储到方法区的静态区中。3、生命周期不同成员变量随着对象的出现而出现,随着对象的消失而消失。静态变量随着类的出现而出现,随着类的消失而消失。静态数据成员和普通数据成员区别较大,体现在下面几点:(1)普通数据成员属于类的一个具体的对象,只有对象被创建了,普通数据成员才会被分配内存。而静态数据成员属于整个类,即使没有任何对象创建,类的静态数据成员变量也存在。(2)因为类的静态数据成员的存在不依赖与于任何类对象的存在,类的静态数据成员应该在代码中被显式地初始化,一般要在类外进行,例如上例。在C 11标准中,我们可以为静态成员提供const整数类型的类内初始值,不过要求静态成员必须是字面值常量类型的constexpr(源自C Primer中文版270页)。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。