• 静态成员函数(面向对象的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指针的额外开销,因此静态成员函数与类的全局函数相比速度上会有少许的增长;

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

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

      调用类的静态成员函数。

  • 相关阅读:
    7.$a = 'abcdef'; 请取出$a的值并打印出第一个字母
    8.PHP可以和sql server/oracle等数据库连接吗?
    6.能够使HTML和PHP分离开使用的模板
    4.用PHP打印出前一天的时间格式是2006-5-10 22:21:21
    5.echo(),print(),print_r()的区别
    3.数据库中的事务是什么?
    spring中配置quartz调用两次及项目日志log4j不能每天生成日志解决方法
    tomcat7性能调优与配置(以windows版为例)
    eclipse中maven下载不了私服上面的第三方包问题
    birt4.6部署到tomcat及启动服务报错解决方法
  • 原文地址:https://www.cnblogs.com/QoQian/p/4898253.html
Copyright © 2020-2023  润新知