普通成员函数和静态成员函数

注:普通成员又名非静态成员。静态(static)成员。类成员包括数据成员和成员函数。

两者区别
1分配内存的时间不同

静态成员属于类本身,不属于具体类对象,在类加载时分配内存空间,程序结束时才消失。可以类名直接访问。
普通成员属于类对象,在类对象创建时(类的实例)才会分配内存,即动态加载内存,不用时消失。通过类对象去访问。
注:静态成员不能去访问普通成员,因为静态成员存在于普通成员之前,我们不能去访问一个内存中不存在的东西。

2是否传递this指针

普通成员函数传递this指针。实质是一个包含指向具体对象的this指针的函数,即其隐式包含一个指向当前对象的this指针。
静态成员函数不传递this指针。
注:也就是说静态成员函数不接受隐含的this指针,无法直接访问类中的非静态成员。

3成员函数间访问

普通成员可以访问静态成员;
静态成员函数只能通过对象间接引用非静态成员。
代码如下:

#include<iostream> 
using namespace std;
class A{
    public:
        void generalFun(){//实质void generalFun(A*this)
            cout<<"this is general fun"<<endl;
        }
        static void staticFun(A a){
            a.generalFun();//实质generalFun(&a)
            cout<<"this is static fun"<<endl; 
        }
    private:
        int a;
        static int b;
}; 
int A::b=1;//静态数据成员是静态存储,必须初始化。1在类体外初始化;2使用作用域运算符表明它所属的类。
int main(){
    A a;
    A::staticFun(a);
    return 0;
}
//运行结果如下:
this is general fun
this is static fun
注:

1静态数据成员初始化格式如下:
<数据类型> <类名>::<静态数据成员名>=<值>
引用格式:
<类名>::<静态成员名(成员数据/成员函数)>

2静态成员变量性质:
1只能被初始化一次,下次执行该语句时自动跳过。
2属于类,而非具体对象

3静态成员函数性质:
1不包含指向具体对象的this指针;
2不可以直接调用普通成员。
3类加载时分配内存空间属于类而非具体对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值