#ifndef
#define
#include <iostream>
using namespace std;

class A {
public:
int x;
static int y;
void show();
void static show1();
void static show2(A &a);
};


#endif
#include "A.h"

void A::show() {
cout << "A::show()" << endl;
show1();//普通成员函数可以访问静态成员函数
}

void A::show1() {//static 静态函数中没this指针,静态成员函数不可访问普通成员变量,可以访问静态成员变量
cout << "A::show1()" << endl;
//cout << "x = " << x << endl;
cout << "y = " << y << endl;
//show(); 静态成员函数不能访问普通成员函数
A b;
show2(b);//静态成员函数可以访问静态成员

}

void A::show2(A &a) {//static
cout << "A::show2(A &a)" << endl;
cout << "a.x = " << a.x << endl;// 可以通过类对象访问普通或静态成员变量
cout << "a.y = " << a.y << endl;//static
a.show();//类对象访问普通成员函数
a.show1();//类对象访问静态成员函数
}

int A::y = 1;//静态变量定义及初始化
#include "A.h"



void fun() {

//静态变量在内存中只有一份,独立于类对象;普通成员变量在不同对象中均有保存
A a1;
a1.y = 2;
a1.x = 22;
cout << "a1.y = " << a1.y << " a1.x = " << a1.x << endl;

A a2;
a2.y = 3;
a2.x = 33;
cout << "a1.y = " << a1.y << " a1.x = " << a1.x << endl;
cout << "a2.y = " << a2.y << " a2.x = " << a2.x << endl;

//a1.show();//类对象可以访问所有的成员包括静态的
//a1.show1();
//a1.show2(a2);

}

//静态成员函数中没this指针

int main() {

fun();

return 0;
}