静态成员函数为什么不能访问本类中的非静态成员?

如题所述

和静态数据成员一样,静态成员函数是类的一部分,而不是对象的一部分。如果要在类外调用公用的静态成员函数,要用类名和域运算符“∷”。如Box∷volume( );实际上也允许通过对象名调用静态成员函数,如a.volume( );但这并不意味着此函数是属于对象a的,而只是用a的类型而已。静态成员函数的作用是为了能处理静态数据成员。可以说,静态成员函数与非静态成员函数的根本区别是:非静态成员函数有this指针,静态成员函数并不属于某一对象,它与任何对象都无关,静态成员函数没有this指针。由此决定了静态成员函数不能访问本类中的非静态成员。在C++程序中,静态成员函数主要用来访问静态数据成员,而不访问非静态成员。假如在一个静态成员函数中有以下语句:cout<<height<<endl; //若height已声明为static,则引用本类中的静态成员,合法cout<<width<<endl; //若width是非静态数据成员,不合法但是,并不是绝对不能引用本类中的非静态成员,只是不能进行默认访问,因为无法知道应该去找哪个对象。如果一定要引用本类的非静态成员,应该加对象名和成员运算符“.”。如cout<<a.width<<endl; //引用本类对象a中的非静态成员
温馨提示:内容为网友见解,仅供参考
无其他回答

静态成员函数为什么不能访问本类中的非静态成员?
可以说,静态成员函数与非静态成员函数的根本区别是:非静态成员函数有this指针,静态成员函数并不属于某一对象,它与任何对象都无关,静态成员函数没有this指针。由此决定了静态成员函数不能访问本类中的非静态成员。在C++程序中,静态成员函数主要用来访问静态数据成员,而不访问非静态成员。假如在一个静态...

为什么静态成员不能访问非静态成员
简单点说:静态成员属于类,不需要生成对象就存在了.而非静态需要生成对象才产生.所以静态成员不能直接访问.下面说说静态的特点: 1.随着类的加载而加载 也就是,说静态会随着类的消失而消失,说明静态的生命周期最长 2.优先于对象的存在 明确一点:静态是先存在的对象是后存在的 3.被所有对象共享 4....

C++, 为什么一个静态函数A,无法调用非静态函数B?
\/*这是因为类的普通函数是在对象被创建的时候才为它分配空间的。所以你上面为什么会出错呢。你在静态函数里面调用了类的普通函数,你这时候创建了类的对象了吗?很显然没有。因为你没有实例化,所以这时候系统还没有为它分配空间。所以就造成了出错。*\/ ...

静态成员函数不可以访问类中的成员变量
静态成员函数不属于任何一个类对象,没有this指针,而非静态成员必须随类对象的产生而产生,所以静态成员函数"看不见"非静态成员,自然也就不能访问了 但是如果静态成员函数通过引用一个对象,是可以直接访问成员的,也体现了它成员函数的特权。比如 class A{int m_i;public:static void f(){m_i=66...

C++静态成员函数,怎么就访问私有变量了...
C++会区分两种类型的成员函数:静态成员函数和非静态成员函数。这两者之间的一个重大区别是,静态成员函数不接受隐含的this自变量。所以,它就无法访问自己类的非静态成员。左例中分别声明了成员函数void add(),成员变量int a,和静态成员函数 static void staticfunc(),静态成员变量 static int sa.在...

Java中 无法从静态上下文中引用非静态 变量 this
在类DuiLie的前面加上static,因为static void main函数是静态函数,只能调用静态成员,不能调用动态成员

静态成员函数能不能访问非静态数据成员
没有搞错 这是C++语法所决定的 C++类的静态成员变量和静态成员函数是所有实例共用的 这个和C的静态变量静态函数的概念不一样,需要理解 所以类静态函数访问

静态成员函数怎么引用该类中的非静态成员函数
静态成员函数可以直接引用该类的 静态数据成员 和 静态成员函数,但不能直接引用 非静态数据成员 和 非静态成员函数,否则编译报错。如果要引用,必须通过参数传递的方式得到对象名,然后再通过对象名引用#include<iostreamusingnamespacestd;classMyclass{private:intm;\/\/ 非静态数据成员staticintn;\/\/...

c++ 静态成员函数能调用非静态成员吗
静态成员的定义是针对类的一个对象而言的,即该类的每个对象都有一套自己的静态成员变量和函数。如果想要静态成员函数调用非静态成员,那就必须有一个这个类的instance(实例)才行,例如:class foo{public:foo():m_i(0){}static void add1(foo& instance); \/\/实例传入函数static void add1();\/...

无法从静态上下文中引用非静态 变量this为什么?怎么改?谢了 !
在静态成员函数里面是不允许访问实例的this变量的:f.addWindowListener(new (this));你应该把 my 设计成单例模式的类 public class my extends WindowsAdapter { static my instance;public static my getInstance() { if (instance == null) instance = new my();return instance;} private my()...

相似回答