C++中的常成员函数与函数重载

在C++中,函数重载(Function Overloading)是指在同一个作用域中,允许多个函数同名,但它们的参数列表不同。常成员函数(const Member Functions)是指那些不会修改对象状态的成员函数。本文将总结常成员函数的概念和函数重载,并解释常成员函数如何参与函数重载,提供相关示例代码。

常成员函数(const Member Functions)

常成员函数是成员函数的一种,它不会修改类的任何数据成员。声明常成员函数时,需要在函数声明的结尾加上关键字 const。在常成员函数内部,不允许修改任何非 mutable 的数据成员,也不能调用任何非 const 的成员函数。

示例
class MyClass {
private:
    int value;
public:
    MyClass(int v) : value(v) {}
    
    // 常成员函数
    int getValue() const {
        return value;
    }
    
    // 非常成员函数
    void setValue(int v) {
        value = v;
    }
};

函数重载(Function Overloading)

函数重载是C++中允许同一作用域内多个函数同名,但它们的参数列表(参数个数或参数类型)不同的特性。编译器通过参数列表来区分这些同名函数。

常成员函数的重载

常成员函数也可以参与函数重载。特别地,可以重载一个常成员函数和一个非常成员函数。这允许在不同的上下文中对同一函数名进行不同的处理。

示例
#include <iostream>

class MyClass {
private:
    int value;
public:
    MyClass(int v) : value(v) {}
    
    // 常成员函数
    int getValue() const {
        return value;
    }
    
    // 非常成员函数
    int getValue() {
        return value + 10; // 返回修改后的值,假设这个操作是合法的
    }
};

void printValue(const MyClass& obj) {
    std::cout << "Const function call: " << obj.getValue() << std::endl;
}

void printValue(MyClass& obj) {
    std::cout << "Non-const function call: " << obj.getValue() << std::endl;
}

int main() {
    MyClass obj1(42);
    const MyClass obj2(42);

    // 调用非常成员函数
    printValue(obj1);

    // 调用常成员函数
    printValue(obj2);

    return 0;
}
运行结果
Non-const function call: 52
Const function call: 42

代码解释

在上述代码中,我们定义了一个类 MyClass,它包含两个重载的 getValue 成员函数:

  1. int getValue() const:常成员函数,返回成员变量 value
  2. int getValue():非常成员函数,返回 value + 10

我们还定义了两个重载的 printValue 函数:

  1. void printValue(const MyClass& obj):接受 const 引用参数,调用常成员函数。
  2. void printValue(MyClass& obj):接受非 const 引用参数,调用非常成员函数。

main 函数中:

  • 对象 obj1 是非 const 的,因此调用非常成员函数,结果为 52
  • 对象 obj2const 的,因此调用常成员函数,结果为 42
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值