类中包含成员变量和成员函数,成员变量又分为静态成员变量和非静态成员变量,成员函数又分为静态成员函数和非静态成员函数;
他们之间的访问关系如下:
非静态成员函数可以访问非静态成员变量,也可以访问静态成员变量,都是直接访问,不需要加对象名称;
静态成员函数可以直接访问静态成员变量,但是如果要访问非静态成员变量,则需要在非静态成员变量前加上对象名称,如:obj->m_memoberVariable();
另外,静态成员变量不但要在类的头文件中声明,还需要在源文件中定义,若只在头文件中声明,那么在成员函数中访问静态成员变量是会报错“无法解析的外部符号”;
程序如下所示:
//头文件 test.h
#include "stdio.h"class MyClass
{
public:
int function_unstatic();
static int function_static(MyClass *pClass);
private:
int memober_unstatic;
static int memober_static;
};
//源文件 test.cpp
#include "test.h"
int MyClass::memober_static;//静态成员变量需要源文件中定义,非静态成员变量不需要
int MyClass::function_unstatic()
{
memober_unstatic = 1;
memober_static = 1;
return 1;
}
int MyClass::function_static(MyClass *pClass)
{
pClass->memober_unstatic = 2;//直接写memober_unstatic = 2;会报错
printf("memober_unstatic:%d\n", pClass->memober_unstatic);
memober_static = 2;
printf("memober_static:%d\n", memober_static);
return 1;
}