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

    2015-03-06 21:25:44
    静态数据成员定义:static 类型 静态数据成员...引用静态数据成员时采用格式:类名::静态数据成员。 例子如下: #include using namespace std; class Myclass { private: int n; public: Myclass(int i){ n = i; }

    静态数据成员定义:static    类型     静态数据成员;

    静态数据成员初始化方法:类型     类名::静态数据成员=值;

    引用静态数据成员时采用格式:类名::静态数据成员。

    例子如下:

    #include<iostream>
    using namespace std;
    class Myclass
    {
    private:
    	int n;
    public:
    	Myclass(int i){ n = i; }
    	void add(){ s += n; }
    	static int s;
    };
    int Myclass::s = 0;
    void main()
    {
    	Myclass a(2), b(5), c(8);
    	a.add();
    	cout << "s=" << Myclass::s << endl;
    	b.add();
    	cout << "s=" << Myclass::s << endl;
    	c.add();
    	cout << "s=" << Myclass::s << endl;
    }

    得到的结果为:



    展开全文
  •   静态数据成员在内存中只占一份空间,而不是每个对象都为它分配空间,每个对象都可以引用这个数据成员。静态数据成员所占的空间不属于对象,同成员函数类似。它所占的内存在声明一个类的时候程序开始运行就已被...

    静态数据成员

      静态数据成员在内存中只占一份空间,而不是每个对象都为它分配空间,每个对象都可以引用这个数据成员。静态数据成员所占的空间不属于对象,同成员函数类似。它所占的内存在声明一个类的时候程序开始运行时就已被分配,并可被使用(同静态变量类似)。静态数据成员可以被初始化,但只能在体外被初始化。如果静态数据成员是公用的(在public下声明),则可以在体外采用类名或对象名直接引用,而如果它是私有的(在private下声明),则它只能采用对象名(不可能是对象名,因为对象的数据成员若是私有的,只能通过对象的成员函数引用)公用的成员函数引用

    静态成员函数
    它属于类,而不属于对象,没有this指针,因此它不能访问非静态数据成员(这里指的不能访问是指不能默认访问,要想访问某个对象的非静态数据成员时,只需加上对象名和成员运算符即可 ),实际上,静态成员函数是用来访问静态数据成员的。

    class Box
    {
    	public: 
    		static int fun();
    		
    
    };
    ...
    int main()
    {
    	Box b1;
    	Box::fun(); // 正确,可以使用类名来访问静态成员函数
    	b1.fun();   //正确,也可以使用对象名来访问静态成员函数
    	return 0;
    }
    

    注意,可以使用对象名来访问静态成员函数,但这不代表该静态成员函数就属于这个对象,实际上它还是属于类的。

    注意理解:采用非静态成员函数引用静态数据成员的方法、采用静态成员函数引用非静态数据成员的方法
    理解时要始终抓住成员函数和数据成员到底是属于类的还是属于对象的,如果是属于类的,那么在引用时不需可以直接引用,如果是属于对象的,则在引用时要显式地指出对象名。

    看一段代码😁

    # include<iostream>
    using namespace std;
    class Student
    {
    public:
    	Student(int n, int a, float s):num(n),age(a),score(s){}
    	void total();    //普通成员函数
    	static float average();     //静态成员函数
    private:
    	int num;
    	int age;
    	float score;
    	static float sum;   //私有的静态数据成员
    	static int count;   //私有的静态数据成员
    };
    
    void Student::total()
    {
    	sum+=score;      //普通成员函数也可以直接访问静态数据成员,因为后者是属于类的
    	count++;    //同上
    }
    float Student::average()
    {
    	return(sum/count);    //静态成员函数访问静态数据成员
    }
    float Student::sum=0;
    int Student::count=0;
    int main()
    {
    	Student std[3]=
    	{
    		Student(1001,18,70),
    		Student(1002,19,78),
    		Student(1003,20,98)
    	};
    	int n;
    	cout<<"input n"<<endl;
    	cin>>n;
    	for(int i=0; i<n; i++)
    		std[i].total();
    	cout<<"the average score of "<<n<<" is "<<Student::average()<<endl;
    	return 0;
    }
    
    运行结果:
    input n
    2
    the average score of 2 is 74
    Press any key to continue
    
    

    再看一段:

    # include<iostream>
    using namespace std;
    class Student
    {
    public:
    	Student(int n, int a, float s):num(n),age(a),score(s){}
    	void total();
    	float average();   普通成员函数
    private:
    	int num;
    	int age;
    	float score;
    	static float sum;
    	static int count;
    };
    
    void Student::total()
    {
    	sum+=score;
    	count++;
    }
    float Student::average()
    {
    	return(sum/count);
    }
    float Student::sum=0;
    int Student::count=0;
    int main()
    {
    	Student std[3]=
    	{
    		Student(1001,18,70),
    		Student(1002,19,78),
    		Student(1003,20,98)
    	};
    	int n;
    	cout<<"input n"<<endl;
    	cin>>n;
    	for(int i=0; i<n; i++)
    		std[i].total();
    	cout<<"the average score of "<<n<<" is "<<std[0].average()<<endl;
    	return 0;
    }
    
    
    
    运行结果:
    input n
    2
    the average score of 2 is 74
    Press any key to continue
    

    好好体会一下两者的区别:前者是用静态成员函数访问静态数据成员。后者是用非静态成员函数访问静态数据成员

    展开全文
  • 1 静态数据成员不能用参数初始化表对静态数据成员初始化 (1) 如果声明了类而未定义对象,则类的一般数据成员是不...只要在类中指定了静态数据成员,即使不定义对象,也为静态数据成员分配空间,它可以被引用。 (2)

    1 静态数据成员不能用参数初始化表对静态数据成员初始化

    (1) 如果声明了类而未定义对象,则类的一般数据成员是不占内存空间的,只有在定义对象时,才为对象的数据成员分配空间。但是静态数据成员不属于某一个对象,在为对象所分配的空间中不包括静态数据成员所占的空间。静态数据成员是在所有对象之外单独开辟空间。只要在类中指定了静态数据成员,即使不定义对象,也为静态数据成员分配空间,它可以被引用。

    (2) 静态数据成员不随对象的建立而分配空间,也不随对象的撤销而释放(一般数据成员是在对象建立时分配空间,在对象撤销时释放)。静态数据成员是在程序编译时被分配空间的,至程序结束时才释放空间

    (3) 静态数据成员可以初始化,但只能在类体外进行初始化

    注意:静态数据成员不能用参数初始化表对其初始化。如在定义Box类中这样定义构造函数是错误的:Box(int h, int w, int len):height(h){}

    (4) 静态数据成员可以通过对象名引用,也可以通过类名引用。

                                     —《C++面向对象程序设计(第2版)》P104-P105

    分析:静态数据成员可以初始化,但只能在类体外初始化,并且不能用参数初始化表对其初始化。

    如: class Box

         {

            public:

               int volume();

           private:

               static int height;

               int width;

               int length

    };

     

    int Box::height = 10; //正确

    Box(inth, int w, int len):height(h){} //错误

     

    静态成员与对象无关,属于整个类,构造函数是构造某个具体的对象。创建一个对象的时候会用到初始化表,但是静态成员在对象创建之前就已经存在了,所以不需要再初始化表中初始化。

    展开全文
  • 一、静态数据成员  一般来说,如果只声明了类而未定义对象,则类的一般数据成员是不占内存空间的,只有...只要在类中定义了静态数据成员,即使不定义对象也为静态数据成员分配空间,它可以被引用。-------在一个类中

         一、静态数据成员

                一般来说,如果只声明了类而未定义对象,则类的一般数据成员是不占内存空间的,只有在定义对象时,才为对象的数据成员分配空间。但是静态数据成员不属于某一个对象,在为对象所分配的空间中不包括静态数据成员所占的空间。静态数据成员是在所有对象之外单独开辟空间。只要在类中定义了静态数据成员,即使不定义对象也为静态数据成员分配空间,它可以被引用。-------在一个类中,可以有一个或多个静态数据成员,所有的对象共享这些静态数据成员,都可以引用它。

               静态数据成员的生存周期:在程序编译时被分配空间的,到程序结束时才释放空间。

               静态数据成员初始化:只能在类外初始化一般形式:数据类型   类名::静态数据成员名 = 初值;注:不能用参数初始化表对静态数据成员初始化。

               静态数据成员引用:可以通过对象名引用,也可以通过类名来引用。

               静态数据成员被定义为私有:则不能再类外引用,只能通过公用的成员函数引用。

               静态数据成员与全局变量的不同:静态数据成员的作用域只限于定义该类的作用域内。

         二、静态成员函数

    同静态数据成员一样,静态成员函数也是属于类的一部分而不属于对象的一部分。

    静态成员函数作用:静态成员函数的作用为了能处理静态数据成员。而不能访问非静态数据成员。

    静态成员函数没有this指针,所以静态成员函数不能访问本类中的非静态成员。(因为没有this指针,那么就不知道它指向某一对象,就无法对一个对象中的非静态成员进行默认访问)。除非在静态成员函数里指定是哪个对象的。但一般没有这么做。静态成员函数仅只是为了访问静态数据成员而生的。

              

    展开全文
  • 具体使用方法是:在类中声明数据成员时,在前面加上关键词static 。例如 satatic int count;//表示count是静态数据成员 这样每个不同的类对象就共享同一个count。初始化时要注意,必须使用类名引用...
  • This指针 `This指针是一个自引用指针,每当创建一个...`与一般的数据成员不同,无论建立多少个类的对象,都只有一个静态数据成员的拷贝。(拷贝构造函数的作用是在建立一个新对象,使用一个已经存在的对象去初始..
  • 类的静态成员变量初始化...1、静态数据成员在定义或说明前面加关键字static。//静态变量的定义 2、静态成员初始化与一般数据成员初始化不同。静态数据成员初始化的格式如下:  <数据类型><类名>::&l...
  • 引用地址:http://www.jb51.net/article/41775.htm ...当将类的某个数据成员声明为static,该静态数据成员只能被定义一次,而且要被同类的所有对象共享。各个对象都拥有类中每一个普通数据...
  • 创建一个QT的dll工程,生成lib、dll文件后,新建一个测试工程,将动态库的头文件、lib文件加入到该工程里,通过头文件引用dll的导出类. 编译测试工程报错: 1>GeneratedFiles\Release\moc_TestDll.cpp(58): ...
  • 静态函数 用static声明的函数... 用static声明的方法是静态方法,在调用该方法,不会将对象的引用传递给它,所以在static方法中不可访问非static的成员静态方法不再是针对于某个对象调用,所
  • 【填空题】方法体内定义变量,变量前不能加 ;局部变量在使用前必须 ,否则编译会出错;...【填空题】static 方法中只能引用 类型的数据成员和 类型的成员方法;而非 static 类型的方法中既可以引...
  • 类是Java中的一种重要的引用数据类型,也是组成 Java 程序的基本要素,因为所有的 Java 程序都是基于类的。本节介绍如何定义类。在 Java 中定义一个类,需要使用class 关键字、一个自定义的类名和一对表示程序体的大...
  • 静态成员

    2018-05-05 18:02:57
    静态数据是一种特殊的数据成员,用关键字static开头:如果希望个对象中的数据成员的值是一样的,就可以将它定义为静态数据成员,这样它就是所有对象共享的,所有的对象都可以引用它。引用时要加上成员运算符“.”。...
  • 静态成员

    2020-02-23 01:08:52
    在定义类成员是,对于静态数据成员,其类型可以是当前类的类型,而非静态数据成员则不可以,除非数据成员的类型为当前类的指针或引用类型;例如 class CBook{ public: static unsigned int m_price; CBook m_...
  • 总结自各处大佬博客,仅供学习 静态成员变量: 静态成员变量只能被初始化一次,且不该在头文件中初始化,初始化格式为:   &lt;...静态数据成员被类的所有对象所共享,包括该类派生类的对...
  • 定义类就为了静态数据成员分配空间,不随着对象的建立而分配空间 引用方法: - 类名::静态成员 - 对象名:静态成员 在类内的静态数据成员仅仅是对该成员的声明,同时还需要再类外部进行定义 2.静态成员函数 ...
  • [C++] 静态成员

    2018-05-18 17:58:25
    静态类成员分两种:静态成员函数和静态数据成员。静态成员是类的一部分,不是对象的一部分,独立于对象。 使用static关键字声明静态成员,定义,不再使用此关键字。 1. 静态数据成员(static data member) 静态...
  • 静态类和静态类成员 静态类:类可以声明为static的,以指示它仅包含静态成员且不能实例化对象(如Console),即不...使用类中的静态成员时,需要事先初始化这些成员。一个类只能有一个静态构造函数,该构造函数不能...
  • C++静态成员函数

    千次阅读 2019-05-01 17:17:30
    静态数据成员不同,静态成员函数的作用不是为了对象之间的沟通,而是为了能处理静态数据成员。 静态成员函数没有this指针。既然它没有指向某一对象,也就无法对一个对象中的非静态成员进行默认访问(即在引用数据...
  • c++在类里面进行的仅是引用性声明,不会为之分配内存,要求必须单独对静态数据成员进行定义性的声明。形式为: 类型 类名::静态数据成员名; 此时的定义需要再加关键字static,并且可以在定义初始化。 ...
  • 一、前言二、局部变量和类变量的不同处理Java语言中,所有变量使用前都会进行适当...}对于数据成员变量,基本类型(8种)有相应的默认初始值,引用类型(3种 类 接口 数组)默认初始值为null,如下表:小结:Java变...
  • 静态成员函数

    千次阅读 2006-02-17 17:15:00
    静态成员函数和静态数据成员一样,它们都属于类的静态成员,它们都不是对象成员。静态成员函数不接受隐含的this自变量。规则:1、无法访问自己类的非静态成员因此,对静态成员的引用不需要用对象名。 2、如果静态...
  • 静态成员变量 在一个类中,若将一个成员变量声明为static,这种成员称为静态成员变量,与一般的数据成员不同,无论建立了多少... 静态数据成员可以通过类名或者对象名来引用 静态成员变量 static int m_Id; //静态成
  • 这些静态成员不需要实例化即可直接引用静态方法:不需要实例化,可直接引用静态变量:不需要实例化,可直接引用静态代码块:在系统初始化时时使用静态内部类:不能操作访问外部数据静态的类在运行加载到...
  • 静态成员特点

    千次阅读 2018-07-23 21:47:32
    (2)static数据成员只能在类的外部进行初始化(特例:当整型const static数据成员被常量表达式初始化,就可以在类的内部进行初始化,但还需要在外部进行定义)。 (3) static数据成员可以是该成员所属的类类型...
  • 静态数据成员的定义格式:在定义类的成员时前面加static static 类型标识符 静态数据成员名; 在类的声明中仅仅对静态数据成员进行引用性说明,必须在文件作用域的某个地方用类名限定进行定义,这时也可以进行初始...
  • 静态成员函数 静态成员函数和静态数据成员一样,它们都属于类的静态成员,它们都不是对象成员。因此,对静态成员的引用不需要用对象名。 在静态成员函数的实现中不能直接引用类中说明的非静态成员,可以引用类中...
  • C++:类的静态成员

    千次阅读 2020-10-08 21:55:45
    类的静态成员不属于类的任何对象,但可以通过类的对象、引用、指针访问该静态成员,也可以通过作用域运算符访问,类成员函数可以直接使用类的静态数据成员。 静态成员类似于全局变量,保存在静态存储区,一旦被定义...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 976
精华内容 390
关键字:

引用静态数据成员时