导读:本期聚焦于小伙伴创作的《C++中this指针、静态成员和常量成员函数分别是什么怎么用》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《C++中this指针、静态成员和常量成员函数分别是什么怎么用》有用,将其分享出去将是对创作者最好的鼓励。

在C++的面向对象编程体系中,this指针、静态成员和常量成员函数是入门阶段必须掌握的三个核心概念,它们分别对应对象实例标识、类级别共享数据、成员变量保护三种不同的编程需求,理解清楚三者的特性才能写出更规范的C++代码。

C++中this指针、静态成员和常量成员函数分别是什么怎么用

一、this指针

this指针是C++类中每个非静态成员函数都隐含的一个指针参数,它指向调用该成员函数的当前对象实例。当我们在成员函数中访问成员变量或其他成员函数时,编译器实际上会通过this指针来定位对应的对象成员。

1. this指针的基本使用场景

最常见的使用场景是当成员函数的参数名和成员变量名相同时,通过this指针来区分二者,避免变量名冲突导致的赋值错误。

#include <iostream>
using namespace std;

class Student {
private:
    int age; // 成员变量
public:
    // 参数名和成员变量名相同,用this指针区分
    void setAge(int age) {
        this->age = age; // this->age指向当前对象的成员变量age,右侧age是函数参数
    }

    int getAge() {
        return this->age; // 也可以省略this,直接写return age,编译器默认通过this访问成员变量
    }
};

int main() {
    Student stu;
    stu.setAge(18);
    cout << "学生年龄:" << stu.getAge() << endl;
    return 0;
}

2. this指针的特性

  • this指针是隐含参数,不需要我们手动定义,也不能在成员函数的参数列表中显式声明。
  • this指针的类型是 类名* const,即指针本身是常量,不能修改指向的对象,但可以通过它修改所指向对象的非const成员变量。
  • 静态成员函数没有this指针,因为静态成员函数属于类,不属于某个具体对象,不需要通过对象调用。

二、静态成员

静态成员分为静态成员变量和静态成员函数,它们都属于类本身,而不是属于某个具体的对象实例。所有对象共享同一份静态成员,静态成员的生命周期和整个程序的生命周期一致。

1. 静态成员变量

静态成员变量需要在类内声明,类外初始化,初始化时不需要加static关键字,且初始化语句一般放在.cpp文件中,避免重复定义。

#include <iostream>
using namespace std;

class Counter {
public:
    static int count; // 类内声明静态成员变量,记录创建的对象数量
    Counter() {
        count++; // 每创建一个对象,count加1
    }
};

// 类外初始化静态成员变量,不需要加static
int Counter::count = 0;

int main() {
    Counter c1;
    Counter c2;
    Counter c3;
    // 静态成员变量可以通过类名直接访问,也可以通过对象访问
    cout << "当前对象数量:" << Counter::count << endl;
    cout << "通过对象访问:" << c1.count << endl;
    return 0;
}

2. 静态成员函数

静态成员函数没有this指针,因此不能直接访问非静态成员变量和非静态成员函数,只能直接访问静态成员。静态成员函数可以通过类名直接调用,不需要创建对象实例。

#include <iostream>
using namespace std;

class MathUtils {
public:
    static int add(int a, int b) { // 静态成员函数,实现两个数的加法
        return a + b;
    }
};

int main() {
    // 不需要创建对象,直接通过类名调用静态成员函数
    int result = MathUtils::add(3, 5);
    cout << "加法结果:" << result << endl;
    return 0;
}

三、常量成员函数

常量成员函数是在函数声明后面加上const关键字的成员函数,它的作用是承诺不会修改当前对象的任何非静态成员变量(除非成员变量被mutable修饰)。

1. 常量成员函数的定义和使用

常量成员函数可以被常量对象调用,也可以被非常量对象调用;但非常量成员函数不能被常量对象调用。

#include <iostream>
#include <string>
using namespace std;

class Book {
private:
    string title;
    int price;
public:
    Book(string t, int p) : title(t), price(p) {}

    // 常量成员函数,只读取成员变量,不修改
    string getTitle() const {
        return title;
    }

    int getPrice() const {
        return price;
    }

    // 非常量成员函数,修改成员变量
    void setPrice(int p) {
        price = p;
    }
};

int main() {
    const Book book1("C++ Primer", 89); // 常量对象
    cout << "书名:" << book1.getTitle() << endl;
    // book1.setPrice(99); // 错误,常量对象不能调用非常量成员函数

    Book book2("Effective C++", 79); // 非常量对象
    book2.setPrice(85); // 正确,非常量对象可以调用非常量成员函数
    cout << "修改后价格:" << book2.getPrice() << endl;
    return 0;
}

2. 常量成员函数的注意事项

  • 常量成员函数内部不能修改非mutable的非静态成员变量,也不能调用其他非常量成员函数。
  • 如果成员变量被mutable修饰,即使在常量成员函数中也可以修改它的值。
  • 常量成员函数的const关键字是函数签名的一部分,在类外定义常量成员函数时也需要加上const

三者对比总结

特性this指针静态成员常量成员函数
所属主体非静态成员函数隐含参数类本身类成员函数
是否有this指针静态成员函数无,静态成员变量不涉及有,但被const修饰,不能修改指向对象的内容
访问权限可访问所有非静态成员只能直接访问静态成员不能修改非mutable非静态成员变量,可访问所有只读成员
调用方式由编译器自动传递,无需手动调用可通过类名或对象调用可通过常量/非常量对象调用

this指针静态成员常量成员函数C++修改时间:2026-06-29 11:24:44

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。