C++类什么时候用静态方法?什么时候用非静态方法?

C++静态方法与非静态方法的区别,先看一下使用上的区别:

class Test {
    public:
    void non_static_fuc() {
        // 实现略
    }
    static static_func() {
        // 实现略
    }
};
// 非静态方法的使用,必须通过对象调用
Test obj;
obj.non_static_fucn(); // 调用非静态方法
// 静态方法既可以通过对象调用,也可以通过类名调用
obj.static_func();   // 通过对象调用
Test::static_func(); //  通过类名调用

总结几点静态方法和非静态方法的几点主要区别:

  • 非静态方法属于某个对象(类实例),必须通过具体对象调用,调用形式: 对象.方法

  • 静态方法属于类,即可以通过类名::方法调用,也可以通过非静态方法方式调用

  • 非静态方法通过this指针与所属对象关联,静态方法没有this指针

前两点是类非静态方法和静态方法在使用上的区别,第三点是不同的本质原因。

从储存的角度角度将,虽然非静态方法属于对象,但是实际储存时并不是为所有的对象都保存了一个方法,因为所有对象的方法都是相同的,实际保存一份就够了。

于是,之前我就想过,既然非静态方法在内存上也没啥优势,为啥不干脆把所有的方法都定义为静态方法呀,这样调用起来更简单?速度可能更快(因为不用生成实例化)?

其实这么也不无道理,但是C++是面向对象对象编程,面向对象编程主要的特点是啥:抽象、封装、继承和多态。

如果都使用静态函数,抽象和封装好像没啥影响,但是继承和多态肯定没法玩了!

多态实现的基本原理是,在基类将接口函数定义为虚函数,然后子类继承基类并对相关函数进行重写,在调用的时候,是通过this指针进行关联的。

明白上面的内容之后,可以得出以下结论:

如果不考虑继承和多态,那么可以类方法可以是静态的。或者换个角度考虑,如果一个方法与所在的类实例无关,那么就应该是静态的,就像工具类,一般都是静态方法的。

【参考文章】

1、https://blog.csdn.net/u010325193/article/details/88830457

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值