zoukankan      html  css  js  c++  java
  • C++学习之静态成员

    一、静态数据成员

      C++允许将类的数据成员定义为静态成员。静态数据成员是属于类的,整个类只有一个备份,相当于类的全局变量,能够被该类的所有对象共用。

      1.静态成员的声明

      在类数据成员的声明前加上关键字static,就将该成员指定成了静态数据成员。静态数据成员遵守public、private、protected访问权限的限定规则。如:

     1 class Account
     2 {
     3    public:
     4             Account();  //构造函数
     5             ~Account();  //析构函数
     6     //.....................
     7    private:
     8            static int number;  //静态数据成员声明
     9     //.....................
    10 }    

      2.静态数据成员的定义

      在类的声明中将数据成员指定为静态成员,只是一种声明,并不会为该成员分配内存空间,在使用之前应该对他进行定义。静态数据成员常常在类外进行定义,与类成员函数的定义方法一样。定义形式如:  

    1 //类型  类名::静态成员名;
    2 //类型 类名::静态成员名 = 初始值
    3 int Account::number;  //定义静态成员并初始化为0

      注意:(1)在类外定义静态数据成员时,不能加上static限定词

         (2)在定义静态数据成员时可以指定他的初始值,若定义是没有指定初始值,系统将会自动赋上默认值

      3.静态数据成员的访问

      静态成员属于整个类,如果将他定义为类的公有成员,在类外可有两种方式访问。

      a)通过类名访问

        类名::静态成员名

      b)通过对象访问

        对象名.静态成员名

      4.静态数据成员与非静态数据成员的区别

      (1)非静态数据成员与对象关联,每个对象拥有独立的数据成员备份。静态数据成员与类关联,整个类只有一份静态数据成员备份,由全类所有对象共用。(C++会为对象的非静态数据成员分配独立的内存空间,而静态数据成员在内存中则只分配一次)

      (2)非静态数据成员只有在定义了对象之后才存在(也就是分配内存空间)。静态数据成员不属于单个对象,即使没有定义他所属类的任何对象时,就已经存在了。

      (3)非静态数据成员的作用域限定在定义对象的块作用域内,静态数据成员自他的定义开始到程序结束之前有效。

    二、静态成员函数

      在类成员函数的原型前面加上static就将他定义成了静态成员函数。静态成员函数属于整个类,他只能访问该类的静态成员(包括静态数据成员和静态成员函数),不能访问非静态成员(包括非静态数据成员和非静态成员函数)。

      1.静态成员函数的声明定义

     1 class Account
     2  {
     3     public:
     4              Account();  //构造函数
     5              ~Account();  //析构函数       
     6      //.....................
     7          static int getNumber()  //定义静态成员函数
     8        {
     9           return number; //访问静态数据成员
    10        }
    11 
    12      private:
    13             static int number;  //静态数据成员声明
    14      //.....................
    15  }    

      2.调用方式

      静态成员函数的调用方式有两种:

      a)类调用方式

        类名::静态成员函数名(参数表);

      b)对象调用

        对象名.静态成员函数名(参数表);

      3.特别注意

      (1)和普通成员函数一样,静态成员函数也可以在类内或类外定义,还可以定义成内联函数

      (2)静态函数只能访问静态成员(包括静态数据成员和静态成员函数),不能访问非静态成员(包括非静态数据成员和非静态成员函数)

      (3)在类外定义静态成员函数时,不能加上static限定词

      (4)静态成员函数可以在定义类的任何对象之前被调用,非静态成员只有在定义对象后,通过对象才能访问

    ps:如果有什么不对的地方,希望各位前辈同行能够批评指出,本人将感激不尽!!!!

  • 相关阅读:
    Django_redis_session
    python_redis操作
    Django_url反向解析
    Django_分页
    Django_cookie与sesstion
    Django 自定义错误页面 403 404...
    Django_设置静态文件、上传文件
    Django设置子路由
    nginx、uwsgi
    CentOS安装MySQL
  • 原文地址:https://www.cnblogs.com/lrh-xl/p/5256402.html
Copyright © 2011-2022 走看看