本地变量:在函数内部声明以及定义的变量。
成员变量:类的变量,在声明类时声明成员变量(头文件),在定义类的对象时定义成员变量。
成员函数:类的函数,在声明类时声明成员变量(头文件),源文件中定义类的函数
1. 类的头文件中:
class A//声明类A
{
private:
int i;//声明成员变量
public:
void f();//声明成员函数
}
2. 类的源文件中:
void A::f()//定义类A中的成员函数
{
printf("%d\n", i );
}
3. 源文件中:
A a;//定义类的对象a(同时定义了该对象中的成员变量a.i)
a.f();//对象a调用类A中的成员函数f()
注意:成员变量属于类的对象(a),成员函数属于类(A)。
如何理解成员函数的调用过程?
a.f(); 可以等效成f(&a);
简单看来(不考虑私有变量、作用域等区别),成员变量与成员函数可以改成结构体与全局函数:
1. 结构体声明
struct A{
int i;
}
2. 全局函数的声明与定义
void f(A* p)//成员函数的定义
{
printf("%d\n", p->i );
}
3. 结构体的定义(包括结构体中变量的定义)
A a;
那么,成员函数(A::f())怎么知道对象的成员变量(a.i)的地址?
this:the hidden parameter for all member functions
在a.f()中,对于A::f()来说,this就是指向对象a的指针。
即成员函数的完整表示为:
void f(A* this);//成员函数的声明
void A::f(A* this)//成员函数的定义
{
printf("%d\n", this->i );//类似C语言的写法
}
只不过,在C++中,this被隐藏。