第26课.类的静态成员函数
1.静态成员函数
a.静态成员函数是类中特殊的成员函数(静态成员函数没有隐藏的this参数,不能直接去访问普通的成员函数和成员变量)
b.静态成员函数属于整个类所有
c.可以通过类名直接访问公有静态成员函数(变量)
d.可以通过对象名访问公有静态成员函数(变量)
静态成员函数的定义:
直接通过static关键字修饰成员函数
class Test
{
public:
static void Func1(); //声明
static void Func2();
};
int Test::Func2 //定义
{
return 0;
}
eg:
#include <stdio.h>
class Demo
{
int i;
public:
int getI(); //声明
static void StaticFunc(const char *s);
static void StaticSetI(Demo& d, int v);
};
int Demo::getI() //定义
{
return i;
}
void Demo::StaticFunc(const char *s)
{
printf("StaticFunc: %s\n", s);
}
void Demo::StaticSetI(Demo& d, int v)
{
d.i = v; //成员函数可以直接调用成员变量,就算它是private (注意静态成员函数的特殊性)
}
int main()
{
Demo::StaticFunc("main Begin..."); //通过类名调用
Demo d;
Demo::StaticSetI(d, 10);
printf("d.i = %d\n", d.getI());
Demo::StaticFunc("main End...");
return 0;
}
2.静态函数和普通成员函数的区别
注意:静态成员函数不能直接访问普通的成员函数(变量),只能直接访问静态的成员函数(变量)
访问普通成员变量(函数):
a.可以通过对象名来间接访问
成员变量:
class t{
private:
int member;
public:
static int func(t obj){
//return member; 不可以
//return this->member; 不可以
return obj.member; //可以,通过对象名来访问
}
};
成员函数:
class A
{
public:
static void f1();
void f2();
};
void A::f1()
{
A a;
a.f2();
}
void A::f2(){};