精华内容
下载资源
问答
  • C++类中的静态数据成员初始化

    千次阅读 2016-05-16 14:49:24
    每个类只有一个存储单元,静态数据成员为该类所有对象共有,不属于某个对象。静态数据成员初始化必须在类以外进行定义性说明。 形式为: :: =值 静态成员注意以下几点: 1、静态成员必须初始化,如果其...

    每个类只有一个存储单元,静态数据成员为该类的所有对象共有,不属于某个对象。静态数据成员的初始化必须在类以外进行定义性说明。

    形式为:<类型> <类名>::<静态数据成员> =值


    静态成员注意以下几点:

    1、静态成员必须初始化,如果其是有公共访问属性的可以通过对象重新设置值,其最终值以最后一次设置的为准。

    2、初始化方式只能是在类以外进行定义性说明

    3、访问方式可以是对象.静态成员或ClassName::静态数据成员


    通过下面的例子来理解定义:

    1. 包含静态数据成员的类定义头文件代码如下

    #ifndef SINGLETON_H
    #define SINGLETON_H
    
    #include <QObject>
    #include <QString>
    #include <QDebug>
    
    
    class Singleton
    {
    private:
        static Singleton *Instance;
        QString _name;
    
    public:
        static int Test;
    
        static Singleton *createInstance(){
            if(Instance == NULL){
                Instance = new Singleton;
            }
    
            return Instance;
        }
    
        void setName(QString name){
            _name = name;
        }
    
        QString getName(){
            return _name;
        }
    
    private:
        Singleton(){
            qDebug() << "construct";
            Test = 1;
        }
    };
    
    #endif // SINGLETON_H
    

    2. 对应的Cpp文件代码

    #include "singleton.h"
    
    int Singleton::Test = 1;  // 对静态数据成员的初始化操作要在类外进行
    Singleton* Singleton::Instance = NULL;
    

    3. 使用对应的含有静态数据成员的类代码

        Singleton *S1 = Singleton::createInstance();
        Singleton *S2 = Singleton::createInstance();
        Singleton *S3 = Singleton::createInstance();
        Singleton *S4 = Singleton::createInstance();


    展开全文
  • C++中的静态函数

    2012-10-09 14:53:34
    一些有关C++静态函数东西 ...静态成员函数,同静态数据成员类似,它也是属于类,而不是属于某一个对象。 静态成员函数不能访问非静态数据成员,它只能访问静态数据成员,也只能调用其它静态

    一些有关C++中静态函数的东西

    以下内容大部分从网上找来

    这篇文章属于介绍的比较基础的东西

    http://leonguan.spaces.live.com/blog/cns!63d2328323edf129!162.entry

    静态的成员函数,同静态数据成员类似,它也是属于类,而不是属于某一个对象的。
    静态成员函数不能访问非静态的数据成员,它只能访问静态数据成员,也只能调用其它的静态成员函数。原因是:当前对象的地址(this)是被隐含地传递到被调用的函数的。但一个静态成员函数没有this指针,所以它无法访问非静态的成员函数。

    由于静态成员函数是属于类的,所以,静态成员函数的调用方法为:
      类名::静态成员函数名();
    但也允许用对象或指向对象的指针调用。例如,在main()中,静态成员函数f分别被对象x和指向x对象的指针pX调用。

    下面是一个应用静态数据成员和静态成员函数的例子:

    在此程序中,我们将使用类 Count,它为自己的每一个对象提供了对象 ID 号。创建或销毁对象时,将有一静态数据成员记录程序中的对象数。执行结果是显示对象 ID 及对象数。

    #include<iostream.h>
    class Count{
    private:
        static int counter;
        int obj_id;
    public:
        Count(); //constructor
        static void display_total(); //static function
        void display();
        ~Count(); //destructor
    };
    int Count::counter; //definition of static data member
    Count::Count() //constructor
    {
    counter++;
    obj_id = counter;
    }
    Count::~Count() //destructor
    {
    counter--;
    cout<<"Object number "<<obj_id<<" being destroyed\n";
    }
    void Count::display_total() //static function
    {
    cout <<"Number of objects created is = "<<counter<<endl;
    }
    void Count::display()
    {
    cout << "Object ID is "<<obj_id<<endl;
    }
    void main()
    {
    Count a1;
    Count::display_total();
    Count a2, a3;
    Count::display_total();
    a1.display();
    a2.display();
    a3.display();
    }

    输出:
    Number of objects created is = 1
    Number of objects created is = 3
    Object ID is 1
    Object ID is 2
    Object ID is 3
    Object number 3 being destroyed
    Object number 2 being destroyed
    Object number 1 being destroyed

    此程序中,类 Count 中有一静态数据成员 counter。每次创建对象时由构造函数为此数据成员加 1。每次销毁对象时由析构函数减 1。

    在 main() 中,创建对象 a1 后,我们用静态成员函数 display_total() 来显示对象的总数。调用静态成员函数所用的语法,与我们调用一般成员函数所使用的方法有所不同。仅使用类名称调用函数 display_total() ,如下所示。

    Count::display_total();

    静态函数 display_total() 显示已创建的对象数。当我们执行与整个类相关的某个函数时,不需要引用特定的对象。因此,我们不使用特定对象的名称,而是与带有作用域运算符的类本身的名称一起使用静态函数。在进一步定义两个类对象 a2 和 a3 后,该函数再次被调用。

    成员函数 display() 输出每一对象的对象 ID 号。在构造函数中,每次创建对象时,静态变量 counter 的值被赋给数据成员 object_id。因此,每一对象具有唯一编号。这显示在输出中,如下所示:

    Object ID is 1
    Object ID is 2
    Object ID is 3

    程序执行完成后,每一对象均被销毁。您会看到,具有 ID 3 的对象首先被销毁。销毁的原则就是,最后创建的对象最先销毁。

    Object number 3 being destroyed
    Object number 2 being destroyed
    Object number 1 being destroyed

    这篇文章介绍了静态成员函数访问成员变量的若干问题,有些方法还是很精辟的

    http://shellman.blog.sohu.com/98359969.html

    其实我觉得还可以将静态函数定义为带参数的,讲需要用到的成员变量作为静态函数的参数传入静态函数就好了。

    ps:   以下关于静态成员变量

    初始化static成员变量不能安排在类的构造函数中,因为构造函数可能一再被调用,而变量的初值却只应该设定一次。也不要把初始化安排在头文件中,因为它可能会被包含在许多地方。而应该放在main函数之中,或全域函数中,或者任何函数之外。

    初始化时候 [类型名] [类名]::[变量名] 例如:int Base::a ;

    当静态成员变量被声明为private类型时,不能用类名::变量名 为静态成员变量赋值。

    当声明为public 则可以.

     

    另一个应该注意的地方:对静态函数的声明,只需在头文件中声明为static,不需要在cpp文件的函数前面再加static

    展开全文
  • 当类定义了静态数据成员时,由于静态数据成员静态变量原理相同(是一个含有作用域特殊全局变量),因此该静态数据成员初值会被写入编译链接后执行文件。当程序被加载时,操作系统将执行文件中的数据读到...

    当类中定义了静态数据成员。当类中定义了静态数据成员时,由于静态数据成员与静态变量原理相同(是一个含有作用域的特殊全局变量),因此该静态数据成员的初值会被写入编译链接后的执行文件中。当程序被加载时,操作系统将执行文件中的数据读到对应的内存单元里,静态数据成员便已经存在,而这时类并没有实例对象。所以静态数据成员和对象之间的生命周期不同,并且静态数据成员也不属于某一对象,与对象之间是一对多的关系。
    在这里插入图片描述
    因为静态数组成员有此特性,所以在计算类和对象的长度时,静态数据成员属于特殊的独立个体,不被计算在其中。
    如以下代码所示
    在这里插入图片描述
    代码中静态数据成员和普通数据成员两者所属的内存地址空间不同,这也是静态数据成员不参与长度计算的原因之一,两者对比如下:
    在这里插入图片描述

    在这里插入图片描述
    静态数据成员所在处的地址为0x004237A4,而普通数据成员的地址在ebp-4h中,是一个栈空间的地址。在使用过程中,静态数据成员是常量地址,可通过立即数间接寻址来访问。普通数据成员只有在类对象产生后才存在,地址值无法确定,只能以寄存器相对间接寻址的方式访问。所以,在成员函数中使用这两种数据成员时,由于静态数据成员数据全局变量,并且不属于任何对象,因此访问时无需this 指针,而普通的数据成员属于对象所有,访问时需要使用this指针。

    展开全文
  • 用static修饰符修饰数据成员,并不是属于那个对象,而是属于类。...静态数据成员属于作用域,也可以使用public,private,等进行修饰,但是访问层次不同。以下是java代码;import java.text.N...

    用static修饰符修饰的数据成员,并不是属于那个对象的,而是属于类。静态数据成员在定义的时候已经分配了内存,而此时对象还没有建立好。

    当然它也是被保存到类的方法中的,而不是对象内存中,大家都是可以访问,可以通过类名访问,这点在C++中也是如此。

    静态数据成员属于类的作用域,也可以使用public,private,等进行修饰,但是访问层次不同。

    以下是java代码;

    import  java.text.NumberFormat;

    import  java.util.Locale;

    import  java.util.Scanner;

    import  java.lang.Math;

    import java.applet.*;

    import java.awt.*;

    /**

    *

    * @author Administrator  Zhang yongfu

    *

    */

    class  StaticAttribute

    {

    double ia=10;

    static double sa=20;

    }

    public class browse extends StaticAttribute

    {

    public static void main(String[]    args)

    {

    StaticAttribute object1=new StaticAttribute();

    StaticAttribute object2=new StaticAttribute();

    object1.ia=100;

    object1.sa=1000;

    object2.ia=200;

    object2.sa=2000;

    System.out.printf("%f %f %f\n ",object1.ia,object1.sa,sa);

    System.out.printf("%f %f %f ",object2.ia,object2.sa,sa);

    }

    }

    b87a579bf625e460a43269e6d3e91711.png

    可以看到只要有一个对象里的操作改变静态变量的值,所有它以前的值也会发生变化。它属于类的并不是属于特定的对象。

    3597468.html

    展开全文
  • 用static修饰符修饰数据成员,并不是属于那个对象,而是属于类。静态数据成员在定义...静态数据成员属于作用域,也可以使用public,private,等进行修饰,但是访问层次不同。 以下是java代码; import...
  • PHP 静态变量学习

    2017-05-30 10:40:40
    静态变量属于静态存储方式,其存储空间为内存中的静态数据区(在静态存储区内分配存储单元),该 区域中的数据在整个程序运行期间一直占用这些存储空间(在程序整个运行期间都不释放),也可以认为是其内
  • 的静态成员

    2013-05-21 10:12:29
    在C++静态成员是属于整个类而不是某个对象,静态成员变量只存储一份供所有对象共用。所以在所有对象中都可以共享它。使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏原则,保证了安全性还可以节省...
  • 我假设您属于以下类型编码器: 您是一种数据分析类型,他知道如何使用Pandas读取/写入CSV文件,并进行基本的数据操作(切片,对行+列进行索引,使用.apply()函数)。 您不一定是具有运行测试经验经验丰富...
  • Python数据分析与数据可视化章节考试题库答案更多相关问题我们要看到物体,必须有 射入人的眼睛,光在传播的过程若遇到了不透明的物体,...下列物体属于光源的是:[ ]A.萤火虫 B.点燃的蜡烛 C.电亮电灯 D....
  • static静态变量详解

    2018-03-09 09:43:58
    静态变量属于静态存储方式,其存储空间为内存中的静态数据区(在静态存储区内分配存储单元),该 区域中的数据在整个程序运行期间一直占用这些存储空间(在程序整个运行期间都不释放),也可以认为是其内存地址...
  • php static静态变量详解

    2018-12-13 14:04:00
    静态变量属于静态存储方式,其存储空间为内存中的静态数据区(在静态存储区内分配存储单元),该 区域中的数据在整个程序运行期间一直占用这些存储空间(在程序整个运行期间都不释放),也可以认为是其内存地址...
  • 静态变量属于静态存储方式,其存储空间为内存中的静态数据区(在静态存储区内分配存储单元),该 区域中的数据在整个程序运行期间一直占用这些存储空间(在程序整个运行期间都不释放),也可以认为是其内存地址...
  • 一、总结 把局部变量改变为静态变量后是改变了它存储方式,即改变了它生存期。把全局变量改变为静态变量后是改变了它作用域,限制了它...静态变量属于静态存储方式,其存储空间为内存中的静态数据区(在...
  • 数组[非动态数组]与链表同属于数据结构,都有数据结构基本操作,这些操作我已经在上次动态数组实现说过了。数组与链表区别主要表现在以下几方面:(1) 从逻辑结构角度来看 a.数组必须事先定义固定长度...
  • BSS(Block Started by Symbol)通常是指用来存放程序未初始化全局变量和静态变量一块内存区域。特点是:可读写,在程序执行之前BSS段会自动清0。...数据属于静态内存分配。 代码段:代码段(code seg
  • 静态变量属于静态存储方式,其存储空间为内存中的静态数据区(在静态存储区内分配存储单元),该 区域中的数据在整个程序运行期间一直占用这些存储空间(在程序整个运行期间都不释放),也可以认为是其内存地址...
  • 1、类中的静态成员变量 所谓类中的静态成员变量,也就是类使用static关键字来修饰成员变量,针对静态成员变量,大致有以下几点需要注意: * static修饰的静态成员变量不属于任何一个对象,是该类本身内容 *...
  • 数据结构 1800题》

    热门讨论 2012-12-27 16:52:03
    17.以下属于逻辑结构的是(C )。【西安电子科技大学应用 2001一、1】 A.顺序表 B. 哈希表 C.有序表 D. 单链表 二、判断题 1. 数据元素是数据的最小单位。( ) 【北京邮电大学 1998 一、1(2分)】【青岛大学 ...
  • 通常,在一个类定义一个方法为static,那就是说,无需本类对象即可调用此方法,关于static方法,声明为static方法有以下几条限制: 它们仅能调用其他static 方法。 它们只能访问static数据。 它们不能以...
  • static在c++类中的作用

    千次阅读 2018-03-10 09:30:38
    在类声明static变量或者函数时,初始化时使用作用域运算符来标明它所属类,因此,静态数据成员是类成员,而不是对象成员,这样就出现以下作用:(1)类静态成员函数是属于整个类而非类对象,所以它没有this...
  • 数据结构(C++)有关练习题

    热门讨论 2008-01-02 11:27:18
    e. 如有可能,请建立一个存储商品名称和数量文本文件,并为二叉搜索树建立一个成员函数SetupInventory(),用于从该文本文件读取库存商品的数据, 实验报告要求: 1、 按要求记录下二叉搜索树完整实验...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 178
精华内容 71
关键字:

以下数据中属于静态数据的是