C++_pen_静态与常量

成员

常成员、常对象(C++推荐使用 const 而不用#define,mutable)

const 数据成员只在某个对象生存周期内是常量,而对于整个类而言却是可变的(static除外)

1.常数据成员(构造函数初始化表赋值)

cpp 复制代码
class STU{
public:
    A():x(100){
        
    }
    const int x;
}

2.常成员函数

cpp 复制代码
void func() const;

3.常对象

cpp 复制代码
const STU a;

静态成员(属于类不属于对象)

1.静态成员的声明

cpp 复制代码
static int x;
static const int x = 10;

2.静态数据成员初始化

cpp 复制代码
static int STU::x = 10;//类之外的初始化

3.静态成员函数

cpp 复制代码
static void func();//能访问静态成员
//调用方法
STU::func();

例(常成员、常对象)

cpp 复制代码
#include <stdio.h>

class STU{
public:
    
    STU(int data = 0):b(data){    //默认参数 = 0    b = data;
        printf("STU\n");
    }
    ~STU(){
        printf("STU Bye!!!\n");
    }

    void class_print(void) const{
        printf("b = %d\n", b);
    }

private:
    int a;
    const int b;
};

int main(int argc, char const *argv[])
{
    STU x(10);
    x.class_print();

    STU y(100);
    y.class_print();

    STU z;
    z.class_print();
    return 0;
}

例(静态)

基于类不基于对象

cpp 复制代码
#include <stdio.h>

class STU{
public:
    void func1(){
        printf("func1\n");
    }

    static void func2(){  //无需创建对象也可以调用
        printf("func2\n");
    }

    static int data;
};

int STU::data = 0;//一定类外初始化

int main(int argc, char const *argv[])
{
    STU a;
    a.func1();
    a.func2();

    //STU::func1();//不能调用,因为不依附于对象,无static
    STU::func2();

    printf("data = %d\n", a.data);
    STU::data = 1000;
    printf("data = %d\n", a.data);//静态成员也可以改变
    return 0;
}
相关推荐
平常心的技术小牛1 小时前
Qt-快速上手-QMenuBar
开发语言·qt
青 春 记 忆1 小时前
零基础入门Python11|Git实战:为任务管理器建立版本历史
开发语言·git·vscode·python·python3.11
余额瞒着我当琳3 小时前
C++--深拷贝三件套 + swap + 写时拷贝 + vector 扩容 + reserve
java·开发语言·c++
坐吃山猪4 小时前
WebClient内存配置解析
开发语言·springboot·webflux
jdksjw4 小时前
同步与异步、阻塞与非阻塞、多线程、协程超详细讲解(Python并发编程从入门到精通)
开发语言·python
Zach_菠萝侠4 小时前
【DeepSeek Harness 研究】进化方向4:安全加固 思考、设计与实现
开发语言·安全·deepseek
ShineWinsu4 小时前
对于C++:布隆过滤器(bloomfilter)的详细解析
c++·面试·位图·位运算·布隆过滤器·海量数据·比特位
SL-staff5 小时前
技术实践:HR如何用JVS-Logic可视化编排实现考勤数据同步(含节点配置与异常处理)
开发语言·python·低代码·钉钉·可视化编排·jvs-logic·hr技术
SomeB1oody5 小时前
【RustyML入门】6.0. 数学工具
开发语言·后端·机器学习·rust·教程
进制树6 小时前
【飞控开发实战·⑲】ROS2无人机开发环境搭建:Jazzy安装、工作空间与hello_drone节点实战
开发语言·安全·无人机·课程设计