本文用于自己记录学习,由于初学C++,可能某些表述不正确,欢迎批评指正!
静态成员包括静态成员变量和静态成员函数
对于静态成员需要注意的是:
静态成员变量 必须在类内声明,必须在类外初始化
静态成员函数不能是虚函数,因为虚函数是为了多态(父类指针指向子类对象 ),这样与对象有关
静态成员函数只能访问静态成员
非静态成员函数可以访问静态成员 (包括静态成员变量和静态成员函数)
下面举个例子:
#include<iostream>
using namespace std;
class A{
public:
int length;
static int heigth;
A(){};//无参构造
//static int heigth=20;//错误
A(int len){
length=len;
}
static void print(){
//cout<<"length="<<length<<endl;//错误 静态成员函数只能访问静态成员
cout<<"static--print()"<<endl;
//print1();//错误 静态成员函数只能访问静态成员
}
void print1(){
cout<<"静态成员变量heigth="<<heigth<<endl;//正确,非静态成员函数可以访问静态成员
print();//正确
}
//错误
// virtual static void print3(){
// cout<<"virtual static--print3()"<<endl;
// }
};
int A::heigth=20; //不能写static int
int main(){
cout<<"A的heigth="<<A::heigth<<endl;//直接通过类访问
A a(30);
A a1(10);
cout<<a.heigth<<" "<<a1.heigth<<endl;//通过对象访问
a.heigth=10;
cout<<a.heigth<<" "<<a1.heigth<<endl;//可以看到二者都为10,因为静态变量存储在静态区或说全局区,只有一份,所有对象都共享
a.print1();
return 0;
}