当前位置:首页 C++ > 正文

c++类成员函数学习:隐藏的this指针和const修饰类成员函数

作者:野牛程序员:2024-01-03 14:40:16 C++阅读 2403

在C++中,类成员函数在实现时会隐式地接收一个指向当前对象的指针,这个指针被称为this指针。this指针指向调用该成员函数的对象,使得成员函数能够访问对象的成员变量和其他成员函数。

另外,C++中的const关键字也可以用于修饰成员函数,有两种情况需要考虑:const成员函数和常量对象。

  1. const成员函数:

    class MyClass {
    public:
        void nonConstFunction() {
            // 可以修改成员变量
            memberVar = 42;
        }
    
        void constFunction() const {
            // 不允许修改成员变量
            // memberVar = 42;  // 编译错误
        }
    
    private:
        int memberVar;
    };
    • 当一个成员函数被声明为const时,它表明该函数不会修改调用它的对象的成员变量。在这种情况下,this指针的类型会变成指向常量对象的指针,即const ClassName* this

  2. 常量对象调用成员函数:

    const MyClass obj;
    obj.constFunction();  // 允许调用 const 成员函数
    // obj.nonConstFunction();  // 编译错误,常量对象不能调用非 const 成员函数
    • 当一个常量对象调用成员函数时,编译器会自动将其转换为const成员函数的调用,即const ClassName* this

通过使用const修饰成员函数,可以增加代码的可读性和安全性,同时在处理常量对象时提供更多的灵活性。

#include <iostream>

class MyClass {
public:
    void nonConstFunction() {
        // 可以修改成员变量
        memberVar = 42;
    }

    void constFunction() const {
        // 不允许修改成员变量
        // memberVar = 42;  // 编译错误
    }

    void displayMemberVar() const {
        std::cout << "Member Variable: " << memberVar << std::endl;
    }

private:
    int memberVar;
};

int main() {
    MyClass obj;
    obj.nonConstFunction();
    obj.displayMemberVar();  // 输出:Member Variable: 42

    const MyClass constObj;
    constObj.constFunction();
    constObj.displayMemberVar();  // 输出:Member Variable: 42

    // constObj.nonConstFunction();  // 编译错误,常量对象不能调用非 const 成员函数

    return 0;
}

上述代码中,MyClass包含了一个私有成员变量memberVar,以及三个成员函数:nonConstFunctionconstFunctiondisplayMemberVar。其中,nonConstFunction允许修改成员变量,而constFunction声明为const,不允许修改成员变量。在main函数中,展示了如何创建对象并调用这些成员函数。


野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击