普通的成员方法
- 调用的时候必须依赖一个对象
- 可以访问私有的、保护的成员
- 类的作用域中
- 可以调用静态成员方法
- 可以调用常成员方法
static成员方法
- 能访问部分私有的、保护的成员 eg:静态成员变量
- 类的作用域中
常成员方法
- 调用的时候必须依赖一个对象
- 可以访问私有的、保护的成员
- 类的作用域中
- 可以调用静态成员方法
上代码:
//
// Created by yanpan on 2018/9/12.
//
#if 1
#include <iostream>
using namespace std;
class Counter
{
public:
Counter():_counter(0)
{
_number++;
}
void show() //Counter *const this
{
cout<<"_counter:" <<_counter << endl;
}
void show()const //const Counter *const this
{ //不能调用普通成员方法 this指向被const修饰 const Counter *const this不能赋值到 Counter *const this
cout<<"const _counter: "<<_counter <<endl;
}
static void shownumber() //调用静态成员方法不需要对象因为静态成员方法没有this指针
{
cout<<"_nmber: " <<_number << endl;
}
private:
int _counter;
static int _number; //静态成员内存在数据段 //这不是定义,是类型的抽象说明
};
int Counter::_number = 0;
int main()
{
Counter *p = new Counter();
p -> show();
delete p;
Counter counter1;
Counter counter2;
Counter counter3; //Counter*
const Counter counter4; //const Counter*
counter4.show(); // const Counter* 成员方法里有this指针 this指针指向对象的内存
Counter::shownumber(); //静态的成员函数调用不需要一个对象
return 0;
}
#endif
敲黑板:
-
普通对象可以调用常成员方法,但常成员对象不可以调用普通成员方法只能调用常成员方法
原因:因为常对象this指针被修饰 不能将 const Counter* const this 赋值给 Counter* const this 这样是不能赋值的,防止常对象的值被改变 - 静态成员方法没有this指针,调用静态成员方法不需要依赖对象,能访问静态的成员
- 在常成员方法里不能调用普通成员方法,原因和第一点一样
- 静态成员变量大家都可以访问,往往在类里边做一个记数的资源,静态成员变量不依靠对象,所以一般在类外初始化,要加上类的作用域