• 类的static成员总结


    类中添加static成员的目的:为了解决数据共享问题。

    当然全局对象也可以实现数据共享,但相比,static有以下两个优点
    (1)封装性:static成员可以是私有成员,而全局对象是全局的,一般用户代码就可以修改这个值。
    (2)避免命名冲突:static成员的名字是在类的作用域中,因此可以避免与其他类的成员或全局对象名字冲突。

    1. static关键字只能用于类定义体内部声明中,定义不能标示为static。

    2. static成员函数可以直接访问类的static成员,但不能直接访问非static成员;
    类成员函数可以直接访问类的static成员。
    3. static成员必须在类定义体外定义且只能定义一次。
       static成员不能通过构造函数,而是在定义时初始化。
       static关键字只能用于类定义体内部声明中,定义不能标示为static。
    4. static成员不是雷对象的组成部分,故static成员可以使该成员所属类型。

       非static成员被限定声明为自身的指针或引用。

    class Bar{
    public:
    	//...	
    private:
    	static Bar	mem1;	//ok
    	Bar			*mem2;	//ok
    	Bar			mem2;	//error
    }

    5. static 成员不是类的一部分,但是在类的作用域内是可见的。

    全局变量不是类的一部分,但是对类来说,是可见的

    类似地,static成员也不是类的一部分,但是对类来说,static成员在其作用域内是可见的。

    #include <iostream>
    #include<string>
    using namespace std;
    
    class Base{
    public:
    
       static int a;
       static void Fun(string str){
           cout<<str<<endl;
       }
    
       int B_int;
    
    };
    int Base::a=10;//static关键字只能用于类定义体内部声明中,定义不能标示为static。
    
    class Derived:public Base{
    public:
    	void fun(string str){
    		Fun(str);
    	}
    	int D_int ;
    };
    
    int main(void){
    
    	Derived d;
    
    	cout<<"派生类和基类的大小中没有计算static成员,static成员不是类的一部分!"<<endl;
    	cout<<sizeof Base<<endl;
    	cout<<sizeof Derived<<endl;
    	
    
    	string str;
    	str="这是基类的静态成员函数";
    	Base::Fun(str);
    
    	str="基类静态成员函数对派生类作用域是可见的";
    	Derived::Fun( str );
    
    	str="派生类的成员函数可以直接调用基类的静态成员函数";
    	d.fun(str);
    
    	return 0;
    
    }
    因此,类的static成员是一种 只能在类(及其派生类)作用域内可见的静态变量。


  • 相关阅读:
    linux(centos)搭建SVN服务器
    应该具备的能力
    Oracle trunc()函数的用法
    Realistic View for Autodesk Revit 2021
    Snowman
    A Material-Texture Painting Tool
    A Color Picker based on manifold learning
    CPU Path Tracing Renderer
    Rig Space FEM Simulation
    MPM Snow Simulation
  • 原文地址:https://www.cnblogs.com/sjw1357/p/3863981.html
Copyright © 2020-2023  润新知