欢迎来到入门教程网!

C语言

当前位置:主页 > 软件编程 > C语言 >

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

来源:本站原创|时间:2020-01-10|栏目: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++静态成员函数不能调用非静态成员变量(详解)全部内容了,希望大家多多支持我们~

上一篇:从txt中读入数据到数组中(fscanf)的实现代码

栏    目:C语言

下一篇:谈谈C++学习之Pair的使用方法

本文标题:C++静态成员函数不能调用非静态成员变量(详解)

本文地址:https://www.xiuzhanwang.com/a1/Cyuyan/1906.html

网页制作CMS教程网络编程软件编程脚本语言数据库服务器

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:835971066 | 邮箱:835971066#qq.com(#换成@)

Copyright © 2002-2020 脚本教程网 版权所有