精华内容
下载资源
问答
  • 2018-11-04 16:45:36

    C++悠悠然

    君不见黄河之水天上来,东流到海不复回
    //1)在静态内存区中
    //2)所有类对象共用这一个变量,只有唯一一个
    //3)必须在类外面显示定义,显示定义的时候不加static
    //4)可以通过类对象访问,也可以通过类名加作用域访问

    #include <iostream>
    //static成员变量:
    class A
    {
    public:
    	int a;//成员变量
    
    	static int b;	//静态成员变量
    	void f1()
    	{
    		b = 0;		
    	}
    };
    
    //静态成员变量的显示定义
    int A::b = 8;
    void main()
    {
    	A a;
    	A b;
    	std::cout<< sizeof(a) <<std::endl;
    	std::cout<< sizeof(b) <<std::endl;
    	
    	std::cout<< a.b <<std::endl;//8
    	a.b = 10;
    	std::cout<< b.b <<std::endl;//10
    	b.b = 12;
    
    	std::cout<< A::b <<std::endl;//12
    
    	a.f1();
    	std::cout<< A::b <<std::endl;//0
    }
    
    class 人类
    {
    	int 眼睛;
    	int 鼻子;
    	static int 地球;
    };
    人类 人1;
    人类 人2;
    

    欢迎指教

    更多相关内容
  • 通常静态数据成员在声明中声明,在包含方法的文件中初始化.初始化时使用作用域操作符来指出静态成员所属的.但如果静态成员是整型或是枚举型const,则可以在声明中初始化
  • C++ 类静态成员函数

    万次阅读 2020-12-06 18:25:14
    。。。

    规则

    • 和静态成员变量类似,静态成员函数在声明时要加 static,在定义时不能加 static。
    • 静态成员函数可以通过类来调用(一般都是这样做),也可以通过对象来调用。
    • 普通成员函数有 this 指针,可以访问类中的任意成员;而静态成员函数没有 this 指针,只能访问静态成员(包括静态成员变量和静态成员函数)。

    类内定义

    class Some {
    public:
    	static void Test(){}
    };
    

    类外定义

    class Some {
    public:
    	static void Test();
    };
    
    void Some::Test() { //此处不能加static
    
    }
    

    类外定义时不能加static。

    静态成员函数调用方式

    • 通过类调用
    • 通过对象调用
    class Some {
    public:
    	static void Test();
    };
    
    void Some::Test() {
    
    }
    
    // 使用的时候
    int main(int argc, char **argv) {
    	Some::Test();
    
    	Some some;
    	some.Test();
    }
    
    展开全文
  • 静态数据成员是的一部分,在产生任何实例之前已经存在,通过类名::静态成员变量名访问。 函数成员(都在代码区): 静态函数成员与非静态函数成员都为所有,对象并不存在函数的拷贝。静态成员函数和非静态成员函数...
  • 当将的某个数据成员声明为static时,该静态数据成员只能被定义一次,而且要被同类的所有... 静态成员变量不能在中初始化,实际上的定义只是在描述对象的蓝图,在其中指定初值是不允许的。也不能在的构造...

        当将类的某个数据成员声明为static时,该静态数据成员只能被定义一次,而且要被同类的所有对象共享。各个对象都拥有类中每一个普通数据成员的副本,但静态数据成员只有一个实例存在,与定义了多少类的对象无关。静态方法就是与该类相关的,是类的一种行为,而不是与该类的实例对象相关。

        静态成员变量不能在类中初始化,实际上类的定义只是在描述对象的蓝图,在其中指定初值是不允许的。也不能在类的构造函数中初始化静态成员变量,因为静态成员变量为类的各个对象共享,否则每次创建一个类的对象则静态成员变量都要被重新初始化。

        从另外的角度考虑,静态成员变量不可在类体内进行赋值,因为它是被所有该类的对象所共享的,如果你在一个对象里给它赋值,其他对象里的该成员变量也会发生变化,因此,为了避免混乱,所以不可在类体内对静态成员变量进行赋值。

        静态成员的值对所有的对象是一样的。静态成员可以被初始化,但只能在类体外进行初始化。一般形式:

        数据类型类名::静态数据成员名=初值

        注意:不能用参数初始化表对静态成员初始化。如果不对静态成员变量进行显示的初始化,一般系统缺省初始为0。

        静态成员是类所有的对象的共享的成员,而不是某个对象的成员。它在对象中不占用存储空间,这个属性为整个类所共有,不属于任何一个具体对象。所以静态成员不能在类的内部初始化。静态成员变量的用途之一是统计有多少个对象实际存在,比如声明一个学生类,其中一个成员为学生总数,则这个变量就应当声明为静态变量,应该根据实际需求来设置成员变量。

    例如:

    #include "iostream"
    using namespace std;
    
    class test
    {
    private:
         int x;
         int y;
    public:
         static int num;
         static int Getnum()
         {
              //x+=5;   // 这行代码是错误的,静态成员函数不能调用非静态数据成员.
              num+=15;
              return num;
         }
    };
    
    int test::num = 10;
    
    int main(void)
    {
         test a;
         cout<<test::num<<endl;        //10
         test::num = 20;
         cout<<test::num<<endl;        //20
         cout<<test::Getnum()<<endl;   //35
         cout<<a.Getnum()<<endl;       //50
    
         return 0;
    }

        通过上例可知:x+=5; 这行代码是错误的。另外,静态成员函数在类外实现以及静态成员变量在类外初始化时无须加static关键字,否则是错误的。若在类的体外来实现上述的那个静态成员函数,不能加static关键字,这样写就可以了:

     int test::Getnum()
    
     {
    
           .........
    
     }

    1、static成员的所有者是类本身和对象,但是多个对象拥有一样的静态成员;

    2、静态成员变量不能在类定义里边初始化,只能在class body外初始化。

    3、静态成员仍然遵循public,private,protected访问准则。

    4、静态成员函数没有this指针,它不能返回非静态成员,因为除了对象会调用它外,类本身也可以调用。

        静态成员函数可以直接访问该类的静态成员变量和静态成员函数,而不能直接访问类的非静态成员变量,如果一定要访问非静态成员变量则必须通过参数传递的方式得到一个对象名,然后通过对象名来访问。

    例如:

    class Myclass
    {
    private:
            int a,b,c;
            static int Sum;    //声明静态数据成员
    public:
            Myclass(int a,int b,int c);
            void GetSum();
    };
    
    int Myclass::Sum=0;       //定义并初始化静态成员变量
    
    Myclass::Myclass(int a,int b,int c)
    {
            this->a=a;
            this->b=b;
            this->c=c;
            Sum+=a+b+c;
    }
    void Myclass::GetSum()
    {
            cout <<"Sum=" <<Sum <<endl;
    }
    int main(void)
    {
            Myclass me(10,20,30);
            me.GetSum();
            
            return 0;
    }

    由上例可知,非静态成员函数Myclass(int a,int b,int c)和GetSum()都访问了静态数据成员Sum,非静态成员函数可以任意地访问静态成员函数和静态数据成员。但是,静态成员函数不能访问非静态成员函数和非静态数据成员。

    关于静态成员函数,可以总结为以下几点:
    1. 出现在类体外的函数定义不能指定关键字static;
    2. 静态成员之间可以相互访问,包括静态成员函数访问静态成员变量和访问静态成员函数;
    3. 非静态成员函数可以任意地访问静态成员函数和静态成员变量;
    4. 静态成员函数不能访问非静态成员函数和非静态成员变量;
    5. 由于没有this指针的额外开销,因此静态成员函数与类的全局函数相比速度上会有少许的增长;
    6. 调用静态成员函数,可以用成员访问操作符(.)和(->)为一个类的对象或指向类对象的指针调用静态成员函数,或者"类名::静态成员函数名"的方式调用;
    7. 当同一类的所有对象使用一个量时,对于这个共用的量,可以用静态数据成员变量,这个变量对于同一类的所有的对象都取相同的值。

    展开全文
  • 类静态成员函数的定义

    千次阅读 2017-11-16 11:37:15
    类静态成员函数的定义
    #include <iostream>
    using namespace std;
    /*
    1.
    为了管理静态成员,c++提供了静态函数,以对外提供接口。
    并静态函数只能访问静态成员。
    */

    class Student{
    public:
    Student(int n,int a,float s):num(n),age(a),score(s){}
    void total(){
    count++;
    sum += score;
    }
    //2.static 函数声明 
    static float average();
    private:
    int num;
    int age;
    float score;
    static float sum;
    static int count;
    };
     float Student::sum = 0;
     int Student::count = 0;
     //3.类名::函数调用
    float Student::average(){
      return sum/count;
    }
    int main(){
    Student stu[3]= {
    Student(1001,14,70),
    Student(1002,15,34),
    Student(1003,16,90)
       };
       //3.类对象.函数调用
    for(int i=0; i<3; i++){
     stu[i].total();
    }
     cout<<Student::average()<<endl;
     return 0;
    }
    //输出64.67 
    /*
    总结 
    1,静态成员函数的意义,不在于信息共享,数据沟通,而在于管理静态数据成员,
        完成对静态数据成员的封装。
        2,静态成员函数只能访问静态数据成员。
    原因:非静态成员函数,在调用时 this指
              针时被当作参数传进。而静态成员函数属于类,而不属于对象,没有 this 指针。
    */

    展开全文
  • C++ 静态成员变量

    万次阅读 2020-12-06 18:23:43
    有些时候,我们需要一些成员与本身直接相关。而不是与的各个对象保持关联。 我们每创建一个对象,成员变量就会多出一份,各个对象间的成员变量不能共享,是各自独立的变量...静态成员变量属于整个所有 因为
  • C++中模板静态成员

    千次阅读 2020-07-15 22:24:18
    模板静态成员和普通,普通函数的静态成员一样,我们想在函数调用后留些信息,而且这些信息随着函数调用的次数发生改变,也就说函数或者对象执行完后,并没有完全消除而是留下了一下踪迹,比如:函数调用次数...
  • 静态成员函数

    千次阅读 2020-06-16 11:24:36
    静态成员函数 静态成员函数:使用static修饰的成员函数,只能被定义一次,而且要被同类的所有对象所共享,它是的一种行为,与对象无关,它有如下特点: 1)静态函数成员不可以直接访问中非静态数据成员以及...
  • C++中类静态成员map初始化操作

    万次阅读 2015-02-06 22:17:13
    最近作者在项目中遇到一个问题,类静态成员map无法进行初始化,这个问题困扰了作者好多天,今天突然发现了解决此类问题的方法,就写下这篇博客,供大家学习交流,废话不多说了,直接贴代码了 自己写的一个...
  • C#面向对象——静态静态成员

    千次阅读 2020-04-02 18:07:57
    使用 static 修饰符声明属于类型本身而不是属于特定对象的静态成员。 static 修饰符可用于、字段、方法、属性、运算符、事件和构造函数,但不能用于索引器、析构函数或以外的类型。如, static class ...
  • C++中静态成员变量与静态成员函数

    千次阅读 2022-04-22 13:46:51
    C++中静态成员变量与静态成员函数
  • 静态成员:静态中的成员加入static修饰符,即是静态成员.可以直接使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配内存,所以静态成员不能访问非静态的成员..因为静态成员...
  • 中使用静态成员函数是一种破坏封装的行为,因为静态成员函数只能调用静态成员。但是在有些情况下只能使用静态成员函数,比如内绑定自身成员函数作为回调函数,这种情况在开启多线程时很常见,如果不想将回...
  • c++ 静态成员变量用static 关键字来声明,是整个的数据成员,其存储不占用某个具体对象的空间,其存储在静态存储区。 c++ 静态成员函数用static 关键字来声明,用于处理静态成员变量,可以用类名来调用,也可以用...
  • 静态内部和内部的关系 只有内部才能被声明为静态,即静态内部; 只能在内部中定义静态; 静态内部与外层绑定,即使没有创建外层的对象,它一样存在;...是否能拥有静态成员:静态内部.
  • 中的静态成员变量、静态成员函数? (1)中的静态成员变量: 静态成员变量属于整个,不属于某个特定的对象,因此无论创建了多少个对象,所有对象都共享中的静态成员变量。静态成员变量必须在内声明,...
  • C++中的(static)静态成员变量与(static)静态成员函数

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

    千次阅读 2021-06-17 10:35:00
    静态成员变量可以初始化,但只能在体外进行初始化。如: long long student::number = 13926572996; //在体外对静态成员变量赋值 其一般形式为: 数据类型 类名::静态成员变量名 = 初值; 不必在初始化...
  • 对象和——静态成员

    千次阅读 2018-05-29 10:07:53
    这是因为静态成员是单独存储的,而不是对象的组成部分,所以不是在创建对象时被定义的,因此不能在中进行初始化,否则每创建一个对象都会初始化静态成员了。 cout ; //Error 刚才我们不是说可以使用类名...
  • C++中的——静态成员

    千次阅读 2018-09-03 16:04:20
    一、声明静态成员 ...2、静态成员存在于任何对象之外,对象中不包含任何与静态数据成员有关的数据,静态数据成员被所有该类型的对象共享。 3、静态成员函数也不与任何对象绑定在一起,它们不包...
  • 静态成员的定义

    千次阅读 2019-07-13 11:56:00
    静态成员中仅仅是声明,需要在外部定义。类似于普通静态变量的定义,应当把它放在全局作用域中。 class Account { public: Account() { record(); } static int num; private: void record(); }; ...
  • 利用java反射解析内部类静态成员变量的值
  • 静态成员

    千次阅读 2017-09-26 12:43:40
    静态成员是指声明为static的成员(包括成员函数和成员数据)。静态成员的普通成员一样,也有public、protected、private3种访问级别,也可以具有返回值,const修饰符等参数;静态成员的声明即在普通成员的...
  • 我们知道C++静态成员变量是需要初始化的,但为什么要初始化呢。其实这句话“静态成员变量是需要初始化的”是有一定问题的,应该说“静态成员变量需要定义”才是准确的,而不是初始化。两者的区别在于:初始化是...
  • 1 静态成员变量 当的一个成员变量被声明为static类型时,该成员变量就是的静态变量,属于的所有实例。也就是说的静态变量是的所有该实例的全局变量。   静态成员变量的初始化,与其他变量的初始...
  • 【C++】静态成员的声明、初始化静态成员的声明初始化静态数据成员值的改变完整例子 有参考大佬 零点零一 的文章:https://blog.csdn.net/thanklife/article/details/78476737 静态成员的声明 中的静态...
  • 静态成员变量初始化时间

    千次阅读 2020-05-02 14:28:37
    静态成员变量在内声明,可以多次声明 静态成员必须在外定义,定义就是给变量分配内存, 初始化就是给一个变量赋初值,内置类型通常定义时默认初始化 类静态成员变量在main函数执行前完成初始化,有静态...
  • 静态成员,所有对象共享

    千次阅读 2021-06-02 17:21:55
    静态成员函数只能访问静态成员变量
  • 的所有成员函数都可以访问本的私有成员,但是静态成员函数没有this指针,因此通过 该的对象作为函数参数,可以显示访问该的私有成员。 测试程序如下: #include &lt;stdio.h&gt;   class Demo ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 640,684
精华内容 256,273
关键字:

类的静态成员

友情链接: fwqjyedt.zip