zoukankan      html  css  js  c++  java
  • 静态成员函数(面向对象的static关键字)

    静态成员函数

      与静态数据成员一样,我们也可以创建一个静态成员函数,它为类的全部服务而不是某一个类的具体对象服务。静态成员函数与静态数据成员一样,都是类的内部实现,属于类定义的一部分。普通的成员函数一般都隐含一个this指针,this指针指向类的对象本身,因为普通成员函数总是具体的属于某个类的具体对象的。通常情况下,this都是缺省的。如函数fn()实际是this->fn()。但是与普通函数相比,静态成员函数由于不是与任何的对象相联系,因此它不具有this指针。从这个意义上讲,它无法访问属于类对象的非静态数据成员,也无法访问非静态成员函数,它只能调用其余的静态成员函数。下面举个静态成员函数的例子。

     1 #include<iostream>
     2 using namespace std;
     3  
     4 class MyClass
     5 {
     6  private:
     7       int a, b, c;
     8       static int sum;//声明静态数据成员
     9 public:
    10       MyClass(int a, int b, int c);
    11       static void GetSum();//声明静态成员函数    
    12 };
    13 
    14 int MyClass::sum = 0;//定义并初始化静态数据成员
    15 MyClass::MyClass(int a, int b, int c)
    16 {
    17      this->a = a;
    18      this->b = b;
    19      this->c = c;
    20      sum += a+b+c;//非静态成员函数可以访问静态数据成员
    21 }
    22 
    23 void MyClass::GetSum()//静态成员函数的实现
    24 {
    25       //cout<<a<<endl;//错误代码,a是非静态数据成员
    26       cout<<"sum = "<<sum<<endl;
    27 }
    28 
    29 int main()
    30 {
    31       MyClass M(1, 2, 3);
    32       M.GetSum();
    33       MyClass N(4, 5, 6);
    34       N.GetSum();
    35       MyClass::GetSum();
    36 
    37       return 0;
    38 }

    关于静态成员函数,可以总结为以下几点:

      ·出现在类体外的函数定义不能指定关键字static;

      ·静态成员之间可以相互访问,包括静态成员函数访问静态数据成员和访问静态成员函数;

      ·非静态成员函数可以任意地访问静态成员函数和静态数据成员;

      ·静态成员函数不能访问非静态成员函数和非静态数据成员;

      ·由于没有this指针的额外开销,因此静态成员函数与类的全局函数相比速度上会有少许的增长;

      ·调用静态成员函数,可以用成员访问操作符(.)和(->)为一个类的对象或指向类对象的指针调用静态成员函数,也可以直接使用如下格式:

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

      调用类的静态成员函数。

  • 相关阅读:
    【Alpha】测试报告
    【Alpha】发布说明
    【Alpha】项目展示
    【Alpha】Scrum Meeting 10
    【Alpha】Scrum Meeting 9
    【Alpha】Scrum Meeting 8
    “北航Clubs”功能规格说明书
    后端技术规格说明书
    前端设计说明书
    Daily Scrumming* 2015.11.3(Day 15)
  • 原文地址:https://www.cnblogs.com/QoQian/p/4898253.html
Copyright © 2011-2022 走看看