C++静态成员函数不能调用非静态成员变量(详解)

 更新时间:2016年12月22日 10:08:32   投稿:jingxian  
下面小编就为大家带来一篇C++静态成员函数不能调用非静态成员变量(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

其实我们从直观上可以很好的理解静态成员函数不能调用非静态成员变量这句话因为无论是静态成员函数还是静态成员变量,它们

都是在类的范畴之类的,及在类的整个生存周期里始终只能存在一份。然而非静态成员变量和非静态成员函数是针对类的对象而言。

然而从本质上来说类的静态成员函数的函数形参中没有默认的this指针,导致不能调用具体实例对象的成员。

下面我们来测试一下:

先在静态成员函数中调用静态成员变量:

#include <iostream>
using namespace std;

class vpoet
{
public:
  static int a;
  int b;

public:
  vpoet(int data)
  {
    b=data;
  }

  static void statictestfun1()
  {
    cout<<"static a="<<a<<endl;
  }
};

int vpoet::a=10;

int main()
{
  vpoet *V;
  V=new vpoet(5);
  vpoet::statictestfun1();
  return 0;
}

调用成功,截图如下

现在我们再静态成员函数中调用非静态成员变量

#include <iostream>
using namespace std;

class vpoet
{
public:
  static int a;
  int b;

public:
  vpoet(int data)
  {
    b=data;
  }

  static void statictestfun1()
  {
    cout<<"static b="<<b<<endl;
  }
};

int vpoet::a=10;

int main()
{
  vpoet *V;
  V=new vpoet(5);
  vpoet::statictestfun1();
  return 0;
}

编译下提示了错误:

大意是在静态成员函数中引用了类的非静态成员变量b。

其实这里可以再深入分析下:

静态成员变量的函数形参中没有默认的this指针指向类对象本身。所以当我们调用对象的非静态成员变量的时候它不能识别该变量

然而对于静态成员变量而言,其存在于整个类中,为每个类对象共有,所以就算没有默认的this形参仍然可以识别该静态成员变量

以上就是小编为大家带来的C++静态成员函数不能调用非静态成员变量(详解)全部内容了,希望大家多多支持脚本之家~

相关文章

  • C语言中计算函数执行时间的三种方式

    C语言中计算函数执行时间的三种方式

    本文主要介绍了C语言中计算函数执行时间的三种方式,主要包括clock(),timeb和time,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09
  • C语言实现三子棋游戏附注释

    C语言实现三子棋游戏附注释

    这篇文章主要为大家详细介绍了C语言实现三子棋游戏附注释,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • C++ 双向循环链表类模版实例详解

    C++ 双向循环链表类模版实例详解

    这篇文章主要为大家详细介绍了C++ 双向循环链表类模版实例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • QT中QStringListModel类的应用介绍

    QT中QStringListModel类的应用介绍

    QStringListModel是最简单的模型类,具备向视图提供字符串数据的能力,本文主要介绍了QT中QStringListModel类的应用介绍,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • C语言实现校运动会项目管理系统

    C语言实现校运动会项目管理系统

    这篇文章主要为大家详细介绍了C语言实现校运动会项目管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • C++实现LeetCode(112.二叉树的路径和)

    C++实现LeetCode(112.二叉树的路径和)

    这篇文章主要介绍了C++实现LeetCode(112.二叉树的路径和),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • 关于win32 gettimeofday替代方案

    关于win32 gettimeofday替代方案

    下面小编就为大家带来一篇关于win32 gettimeofday替代方案。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • C++中用栈来判断括号字符串匹配问题的实现方法

    C++中用栈来判断括号字符串匹配问题的实现方法

    这篇文章主要介绍了C++中用栈来判断括号字符串匹配问题的实现方法,是一个比较实用的算法技巧,包含了关于栈的基本操作,需要的朋友可以参考下
    2014-08-08
  • 用C语言实现从文本文件中读取数据后进行排序的功能

    用C语言实现从文本文件中读取数据后进行排序的功能

    这是一个十分可靠的程序,这个程序的查错能力非常强悍。程序包含了文件操作,归并排序和字符串输入等多种技术。对大家学习C语言很有帮助,有需要的一起来看看。
    2016-08-08
  • 一篇文章带你了解C语言的文件操作

    一篇文章带你了解C语言的文件操作

    这篇文章主要为大家详细介绍了C语言的文件操作,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02

最新评论