静态成员(变量、函数、单例模式(饿汉模式、懒汉模式))

本文详细介绍了C++中的静态成员,包括静态成员变量和静态成员函数的特性,以及它们在内存中的存储位置和生命周期。此外,还讨论了静态成员在类中的作用,如存储公共属性和作为全局变量、函数的替代。接着,文章阐述了单例模式的概念,列举了适用场景,并对比了饿汉模式和懒汉模式的优缺点,提供了相应的代码示例。
摘要由CSDN通过智能技术生成

一、静态成员

    什么是静态成员:

        被static修饰过的成员变量和成员函数都称为静态成员

    普通成员的特点:

        成员变量:每个类对象中都有各自的一份成员变量,相互之间没有关联

        成员函数:隐藏了一个this指针

    静态成员的特点:

        静态成员变量:

            1、存储在bss或者data内存段中,一个类的静态成员变量只有一份,被所有类对象共享

            2、静态成员变量的生命周期不再依赖于任何对象,为程序的整个生命周期都存在

            3、既然静态成员变量不依赖任何对象,可以通过类名::静态变量名的方式不经过对象直接访问公开的静态成员变量

            4、必须在类内使用static声明,类外单独定义、初始化,在定义时不需要加static

                类型名 类名::静态变量名 = val;

        静态成员函数:

            1、没有隐藏的this指针了,所以静态成员函数中无法直接访问普通成员变量和普通成员函数,但是可以直接访问静态成员

            变量和静态成员函数

            2、虽然不能直接访问普通成员变量和普通成员函数,但是静态成员函数的作用域依然算作类内,因此只要让静态成员函数

            获得类对象的指针或引用,则依然有权限访问private、protected的普通成员变量、成员函数

            (相当于自己传一个this指针给静态成员函数)

            3、调用方式与静态成员变量类似,也不需要依赖对象也可以调用

                对象名.静态成员函数名();

                对象名->静态成员函数名();

           

单例模式是一种设计模式,用于确保一个类只有一个实例,并提供一个全局访问点来获取该实例。在单例模式中,懒汉饿汉是两种常见的实现方式。 1. 懒汉模式懒汉模式是指在需要使用实例时才创建对象。以下是懒汉模式的代码示例: ```java public class Singleton { private static Singleton instance; private Singleton() { // 私有构造函数 } public static synchronized Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } } ``` 在懒汉模式中,通过一个静态变量`instance`来保存实例,初始值为null。在`getInstance()`方法中,首先检查`instance`是否为null,如果为null,则创建一个新的实例并赋值给`instance`,然后返回该实例。由于懒汉模式是线程安全的,因此在`getInstance()`方法上加了`synchronized`关键字,确保在多线程环境下只有一个线程可以创建实例。 2. 饿汉模式饿汉模式是指在类加载时就创建对象,无论是否使用该实例。以下是饿汉模式的代码示例: ```java public class Singleton { private static Singleton instance = new Singleton(); private Singleton() { // 私有构造函数 } public static Singleton getInstance() { return instance; } } ``` 在饿汉模式中,通过一个静态变量`instance`来保存实例,并在定义时就进行初始化。在`getInstance()`方法中,直接返回`instance`即可。由于饿汉模式在类加载时就创建了实例,因此不存在线程安全问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaoyu1381

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值