精华内容
下载资源
问答
  • 静态成员变量不用new对象,在类加载的过程中就已经初始化存放在数据区域,静态成员变量是类和所有对象共有的, 类和对象都可以改变它的值,每一次改变值之后,静态成员变量的值在所有对象里面都将改变。   ...

    原文地址http://www.cnblogs.com/111testing/p/8443539.html

    静态成员变量不用new对象,在类加载的过程中就已经初始化存放在数据区域,静态成员变量是类和所有对象共有的,
    类和对象都可以改变它的值,每一次改变值之后,静态成员变量的值在所有对象里面都将改变。

     

     

    非静态成员变量只能通过对象来赋值,通过对象来改变非静态成员变量的值只对该对象起作用,对其他对象无效

     

    总结:

    理解了内存,就理解了一切,就理解了各种各样的语言。
    所有的语言无非都是这样: 局部变量分配内存永远在栈里面,new出来的东西分配内存永远是在堆里,静态的东西分配内存永远是在数据区。剩下的代码肯定是在代码区。所有的语言都是这样。

    展开全文
  • c++类static成员变量初始化

    万次阅读 2019-05-10 23:12:38
    今天看到一个写法,竟然不知道这种写法。。。我是不是脑子完犊子了。。。 在test.h文件中: class A { public: static int a; //静态数据成员声明 ...类中的静态成员变量的初始化必须在类外实现!! ...

    今天看到一个写法,竟然不知道这种写法。。。我是不是脑子完犊子了。。。

    在test.h文件中:

    class A

    {

    public:

    static int a; //静态数据成员声明

    }

    在test.cpp文件中:

    int A::a = 1; //静态数据成员的定义和初始化

     

    类中的静态成员变量的初始化必须在类外实现!!

    展开全文
  • 局部变量可以将成员变量隐藏掉,Java中提供了一个关键字:this:其代表当前类的对象,或者是(当前类对象的引用)解决局部隐藏了成员变量类的组成中有一个成员(成员方法的定义)1,按返回值划分:void的形式:没有...

    形式参数的问题:如果是基本数据类型,形式参数的改变对实际参数没有影响;如果是引用类型,形式参数的改变会直接影响实际参数。

    局部变量可以将成员变量隐藏掉,Java中提供了一个关键字:this:其代表当前类的对象,或者是(当前类对象的引用)解决局部隐藏了成员变量

    类的组成中有一个成员(成员方法的定义)1,按返回值划分:void的形式:没有具体的返回值

                                                                                            非void形式:有具体的返回值

                                                                 2,参照参数进行划分:有参;空参

    匿名对象就是创建对象的时候没有名字的对象,在实际开发中只使用一次,不要多次使用(可能会造成一个内存溢出的现象)

    :Java提供了关键字:private:私有的

      private:体现的也是一种封装思想
     封装:标准类的写法,将成员变量全部私有化,被private修饰的成员变量只能在本类中访问,可以通过公共的访问方法去访问成员变量

    private的用法:1,被其修饰只能在本类中访问,2,可以通过公共的public去间接访问

    当前成员变量和局部变量一致的情况,遵循就近原则

    static:多个对象对同一个变量进行共享这时候用Jave中的关键字static(静态的,共享的)在方法区中开辟一个静态区域:都是静态标记

            1,静态随着类的加载而加载

            2,static优先于对象存在:main  public static void main(..){...};

            3,static共享数据,可以被多个对象进行共享

            4,如果数据是被静态修饰的,它可以被类名直接调用,被静态修饰的方法:类名.方法名()

                                                      被静态修饰的变量: 类名.变量名;

    static的用法:一个类中可以有静态变量,也可以有非静态变量,

                          可以有静态成员方法,也可以非静态的成员方法

                            非静态的方法,既可以访问静态变量也可以访问非静态变量(静态只能访问静态)

    成员变量和局部变量的区别
       1)在类中位置不同
       成员变量:类中,方法外
    局部变量:方法声明上,或者再方法定义中
       2)在内存中的位置不同:
       成员变量:堆内存
       局部变量:栈内存
       3)生命周期不同:
       成员变量:成员变量是随着类的加载而加载,随着类的消失而消失
      局部变量:随着方法的调用而存在,随着方法调用完毕而消失
      4)初始化值不同
       成员变量:初始化由系统默认初始化,
        对于成员变量,可以不给初始化值,由系统给,然后显示初始化;

       局部变量:定义一个局部变量,必须进行初始化,如果不初始化,无法使用(在使用之前进行初始化)行初始化)

    构造方法作用:给对象进行初始化

    构造方法属于一类的成员:成员变量、构造方法(1、方法名和类名相同      2、构造方法,连void都没有)、成员方法

    构造方法的注意事项:
    1)之前没有写无参构造,系统会默认提供无参构造
      2)如果我们无参构造或者有参构造,系统不会在提供无参构造;定义一个类的时候,永远给出无参构造;
     构造方法是可以重载的:

    展开全文
  • 为什么static成员变量一定要在类外初始化?

    万次阅读 多人点赞 2018-08-17 10:07:01
    在C++中,类的静态成员static member)必须在类内声明,在类外初始化,像下面这样。 class A { private: static int count ; // 类内声明 }; // 类外定义并初始化,不必再加static关键字 int A::count = 0 ; ...

    <转>

    1、为什么静态成员不能在类内初始化? 
    在C++中,类的静态成员(static member)必须在类内声明,在类外初始化,像下面这样。

    class A 
    { 
    private: 
    static int count ; // 类内声明 
    };
    
    // 类外定义并初始化,不必再加static关键字
    int A::count = 0 ; 

    或者只进行定义不赋初始值,但是默认值是否是0,可能会与具体的编译器有关吧?

    // 只进行定义不赋初始值,但默认值视编译器而定
    int A::count;

    为什么?

    因为静态成员属于整个类,而不属于某个对象,如果在类内初始化,会导致每个对象都包含该静态成员,这是矛盾的。

    如果不增加int A::count = 0 ; //变量定义,在编译的时候将会报出:‘A::count’未定义的引用”错误。这是因为静态成员变量count未定义,也就是还没有分配内存,显然是不可以访问的。

    《c++primer》里面说在类外定义和初始化是保证static成员变量只被定义一次的好方法。 但为什么static const int就可以在类里面初始化呢? 
    想起C中一个函数里定义一个static变量是为了保证只初始化一次。

    那么,是否可以这样理解: static数据成员在类外定义和初始化是为了保证只被定义和初始化一次,这样编译器就不必考虑类的函数里面第一个对static变量的’=’操作是赋值还是初始化了。 static const int可以在类里面初始化,是因为它既然是const的,那程序就不会再去试图初始化了。

    2、什么东西能在类内初始化 
    能在类中初始化的成员只有一种,那就是静态常量成员

    //这样不行 
    class A { 
    private: 
        static int count = 0; // 静态成员不能在类内初始化 
    };
    
    //这样也不行 
    class A { 
    private: 
        const int count = 0; // 常量成员也不能在类内初始化 
    };
    
    //但是这样可以 
    class A { 
    private: 
        static const int count = 0; // 静态整型常量成员可以在类内初始化,但是 static const float count就不行了 
    };

     

     

    展开全文
  • 而其实在官方的 Bug 文档中已经提到了 static 成员变量位置变化的说明,JDK-7017732 : move static fields into Class to prepare for perm gen removal 里提到为了迎合移除永久代的需要,静态字段被移到了 Class ...
  • 类中static成员变量定义和声明

    千次阅读 2014-11-26 19:25:49
    类中static成员变量的定义和声明:在VS2010中,只能在类外定义同时赋值,在类中声明。不能再类中声明时赋值!! #include using namespace std; class A { public: static int a; static int b; }; int A::a=1;...
  • 用c++实现单例设计模式的时候,初始化private static 成员变量折腾了一把,这种细节确实记得不清楚。 #include using namespace std; class Singleton { private: static Singleton* st; //static Singleton* ...
  • 因为static成员函数和静态数据成员一样,它们都属于类的静态成员,它们都不是对象成员。因此,对静态成员的引用不需要用对象名。   在静态成员函数的实现中不能直接引用类中说明的非静态成员,可以引用类中说明的...
  • Static成员变量,static成员函数解析

    千次阅读 2015-01-08 20:18:07
    1 类中的Static成员变量 static成员它不像普通的数据成员,static数据成员独立于该类的任意对象而存在,每个static数据成员是与类关联的对象,并不与该类的对象相关联! 一般为类申请一个对象,是对类中成员变量...
  • 类中static变量和成员变量

    千次阅读 2019-03-16 12:45:11
    类中static变量和普通变量的区别(一便解释了摘要中的内容) ​ 要理解标题,我们首先来看下static变量本身的特殊之处,即它存储在全局数据区。在类中的static变量也是如此。 C++的内存分布 代码区 :函数...
  • 因为我们知道静态的方法可以在没有创建实例时使用,而申明为非静态的成员变量是一个对象属性,它只有在对象存在时引用,因此如果在对象未创建实例时我们在静态方法中调用了非静态成员方法自然是非法的,所以编译器会在...
  • 静态成员变量和成员函数是指在类中以static修饰的变量和函数。 直接看例子熟悉其使用和特性: #include <iostream> using namespace std; class test { public: test...
  • const成员函数可以修改static成员变量

    千次阅读 2018-08-27 17:08:02
  • 为了弄清楚sizeof一个拥有static成员变量对象的到底返回多少,首先假设不含有static成员变量的情况下: #include &amp;amp;lt;iostream&amp;amp;gt; using namespace std; int a; class A { public : A...
  • Java 关键字修饰成员变量例子。
  • Java中static成员变量的生命周期

    千次阅读 2017-10-10 22:49:16
    变量static变量在内存中只有一个,存放在方法区,属于类变量,被所有实例所共享销毁:类被卸载时,静态变量被销毁,并释放内存空间。static变量的生命周期取决于类的生命周期 类初始化顺序: 静态变量、静态...
  • 一般来说,类的static成员跟普通数据成员一样,不能在类的定义体中初始化。(至于为什么还没想明白),比如下例   class A { public: static const double b=0; }; 但是有之中情况是例外的,就是整形...
  • java static成员变量和成员函数

    千次阅读 2015-08-28 09:07:03
    static成员变量 希望该类所有的对象共享同一个成员。此时就是 static 大显身手的时候了!! Java 中被 static 修饰的成员称为静态成员或类成员。它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享...
  • static成员(方法、变量)使用简介

    千次阅读 2018-06-22 11:33:26
    代码示例:// static_guide.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" class Point { public: static void init() { a=0;//非静态成员引用 b=0;//非静态成员引用 c = 0; } ...
  • java使用static修饰成员变量

    万次阅读 2016-11-02 16:00:00
    1. static修饰成员变量 :如果有数据需要被共享给所有对象使用时,那么就可以使用static修饰。 静态成员变量的访问方式: 方式1: 可以使用对象进行访问。 格式: 对象.变量名。 方式二: 可以使用类名进行访问。...
  • 0.static修饰类中成员,表示类的共享数据 1.static成员 在C++primer里面说过,static成员不像普通的类数据成员static类数据成员独立于一切类对象处在。static类数据成员是与类关联的,但不与该类定义的对象...
  • C++中类的(static)静态成员变量与(static)静态成员函数

    万次阅读 多人点赞 2018-08-04 11:27:28
    而在C++的类中,也有静态成员变量同时还有静态成员函数,先来看看C++中静态成员变量与静态成员函数的语法: #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; class ...
  • static 成员变量 初始化问题

    千次阅读 2009-10-14 21:53:00
    VS2005 环境下: 1.h /**************************************/#pragma once class Example {public: static double rate ; static const int vecSize=10; // 如果需要如下定义,则必须在类体中
  • static表示“全局”或者“静态”的意思,用来修饰成员...  用public修饰的static成员变量和成员方法本质是全局变量和全局方法,当声明它类的对象市,不生成static变量的副本,而是类的所有实例共享同一个static变量。
  • 关于static成员变量

    千次阅读 2010-12-02 12:18:00
    一直以为对static成员变量还算了解。直到昨晚看了《Effective C++》3rd Item49,才发现自己其实什么都不懂,真是惭愧!所以写下这篇随笔,为以后定期回顾参考,也希望大家不要犯类似的错误。先看以下代码:#include ...
  • 1、static修饰的成员变量是该类的所有实例对象所共享的。可以通过类名.变量名 或者 对象名.变量名 访问。不同类型的变量在没有进行人为初始化时进行访问,这些变量是具有默认初始值的。 2、static修饰的成员方法...
  • 栈(stack):由编译器自动分配释放,存放函数的参数值,局部变量的值(除static),其操作方式类似于数据结构中的栈。 堆(heap):一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构...
  • C++静态成员变量初始化和赋值

    万次阅读 2019-03-07 14:29:57
    但现在CSession作为一个基类(要被继承),显然通过构造传参是非常不合理的,并且我希望CSession只保存一份消息对象指针(static成员变量),提供唯一 一个发送消息的接口给子类。 大致代码如下: typedef ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 539,622
精华内容 215,848
关键字:

static成员变量