c++中静态成员函数访问非静态成员变量
2013-04-19 10:47
417 查看
开始之前先看一个例子
#include <iostream>
using namespace std;
class A
{
public:
//void show(int j){x=j;cout<<x;}
void static show(int j){x=j;cout<<x<<endl;}
private:
int x;
};
int main()
{
A b;
b.show(10);
return 0;
}
编译出错。原因很简单,静态成员函数不能访问非静态成员变量,这是因为静态成员函数属于整个类的而不是属于某个对象。静态成员函数没有隐含的指向某个对象的this指针。所以,它就无法访问自己类的非静态成员。
那么如何才能访问呢?看下面代码:
#include <iostream>
using namespace std;
class A
{
public:
//void show(int j){x=j;cout<<x;}
void static show(A*a,int j){a->x=j;cout<<a->x<<endl;}
private:
int x;
};
int main()
{
A b;
b.show(&b,10);
return 0;
}
编译运行正确。
这里将一个对象指针作为静态成员函数的"this”指针,模仿传递非静态成员函数里的this变量。
#include <iostream>
using namespace std;
class A
{
public:
//void show(int j){x=j;cout<<x;}
void static show(int j){x=j;cout<<x<<endl;}
private:
int x;
};
int main()
{
A b;
b.show(10);
return 0;
}
编译出错。原因很简单,静态成员函数不能访问非静态成员变量,这是因为静态成员函数属于整个类的而不是属于某个对象。静态成员函数没有隐含的指向某个对象的this指针。所以,它就无法访问自己类的非静态成员。
那么如何才能访问呢?看下面代码:
#include <iostream>
using namespace std;
class A
{
public:
//void show(int j){x=j;cout<<x;}
void static show(A*a,int j){a->x=j;cout<<a->x<<endl;}
private:
int x;
};
int main()
{
A b;
b.show(&b,10);
return 0;
}
编译运行正确。
这里将一个对象指针作为静态成员函数的"this”指针,模仿传递非静态成员函数里的this变量。
相关文章推荐
- c++静态成员函数访问非静态成员变量
- C++中静态成员函数访问非静态成员变量
- C++中静态成员函数访问非静态成员变量
- C++静态成员函数访问非静态成员变量的方法
- 关于C++静态成员函数访问非静态成员变量的问题
- 关于C++静态成员函数访问非静态成员变量的问题
- C++中静态成员函数访问非静态成员变量(转)
- C++中静态成员函数访问非静态成员变量
- C++的静态成员函数访问非静态成员变量
- C++中静态成员函数访问非静态成员变量
- C++中静态成员函数访问非静态成员变量
- C++中静态成员函数访问非静态成员变量(转)
- C++中静态成员函数访问非静态成员变量
- 为什么C++静态成员函数不能访问非静态成员变量、不能调用非静态成员函数?(面试常考)
- C++中静态成员函数访问非静态成员变量
- C++ 静态成员变量与静态成员函数
- C++中的静态成员函数不能访问非静态成员
- 北大 C++ 3.4 静态成员变量和静态成员函数
- C++之类的静态成员变量和静态成员函数1
- C++中静态成员函数访问成员变量问题