静态成员函数为什么不能访问…
来源:互联网 发布:oa软件开发平台 编辑:程序博客网 时间:2024/05/24 06:35
原文地址:静态成员函数为什么不能访问本类中的非静态成员?作者:铿然一叶
和静态数据成员一样,静态成员函数是类的一部分,而不是对象的一部分。如果要在类外调用公用的静态成员函数,要用类名和域运算符“∷”。如
Box∷volume( );
实际上也允许通过对象名调用静态成员函数,如
a.volume( );
但这并不意味着此函数是属于对象a的,而只是用a的类型而已。
静态成员函数的作用是为了能处理静态数据成员。
可以说,静态成员函数与非静态成员函数的根本区别是:非静态成员函数有this指针,静态成员函数并不属于某一对象,它与任何对象都无关,静态成员函数没有this指针。由此决定了静态成员函数不能访问本类中的非静态成员。
在C++程序中,静态成员函数主要用来访问静态数据成员,而不访问非静态成员。假如在一个静态成员函数中有以下语句:
cout<<height<<endl; //若height已声明为static,则引用本类中的静态成员,合法
cout<<width<<endl; //若width是非静态数据成员,不合法
但是,并不是绝对不能引用本类中的非静态成员,只是不能进行默认访问,因为无法知道应该去找哪个对象。如果一定要引用本类的非静态成员,应该加对象名和成员运算符“.”。如
cout<<a.width<<endl; //引用本类对象a中的非静态成员
假设a已定义为Box类对象,且在当前作用域内有效,则此语句合法。
Box∷volume( );
实际上也允许通过对象名调用静态成员函数,如
a.volume( );
但这并不意味着此函数是属于对象a的,而只是用a的类型而已。
静态成员函数的作用是为了能处理静态数据成员。
可以说,静态成员函数与非静态成员函数的根本区别是:非静态成员函数有this指针,静态成员函数并不属于某一对象,它与任何对象都无关,静态成员函数没有this指针。由此决定了静态成员函数不能访问本类中的非静态成员。
在C++程序中,静态成员函数主要用来访问静态数据成员,而不访问非静态成员。假如在一个静态成员函数中有以下语句:
cout<<height<<endl;
cout<<width<<endl;
但是,并不是绝对不能引用本类中的非静态成员,只是不能进行默认访问,因为无法知道应该去找哪个对象。如果一定要引用本类的非静态成员,应该加对象名和成员运算符“.”。如
cout<<a.width<<endl;
假设a已定义为Box类对象,且在当前作用域内有效,则此语句合法。
阅读全文
0 0
- 静态成员函数为什么不能访问…
- 为什么C++静态成员函数不能访问非静态成员变量、不能调用非静态成员函数?
- 为什么静态成员不能访问非静态成员
- 为什么静态成员不能访问非静态成员
- 为什么静态成员不能访问非静态成员
- 为什么静态成员不能访问非静态成员(原理)
- 为什么静态成员不能访问非静态成员
- 为什么静态成员不能访问非静态成员
- 为什么静态成员不能访问非静态成员
- 为什么静态成员不能访问非静态成员
- 为什么静态成员不能访问非静态成员
- 为什么静态成员不能访问非静态成员
- 静态成员函数 不能访问非静态成员函数
- 静态成员函数不能访问非静态成员函数
- 为什么静态成员函数不能是const
- 为什么静态成员函数不能是const
- 为什么静态成员函数不能是const
- 静态函数里不能访问成员变量
- IDl保存和恢复变量的方法
- STL vector的之erase应用iterator
- 为什么在C++使用pthread_cre…
- OpenCV函数cvFindContours
- hyperledger fabric0.6 结构分析(二)
- 静态成员函数为什么不能访问…
- typedef和#define的用法与区别&nbs…
- OpenCV打开摄像头 保存视频…
- 谈谈ConcurrentHashMap1.7和1.8的不同实现
- OpenCV_复制一个或多个ROI图像区域
- iOS如何使用TestFlight进行App Beta版测试
- CvMat、Mat、IplImage之间的转换详…
- 光流Optical Flow介绍与OpenC…
- QTSingleApplication的用法