C++:常函数

本文介绍了C++中常成员函数的概念,常函数用于保证不会修改类的成员变量,提供类型检查和在常对象上调用的安全性。示例中展示了如何正确使用和声明常函数,以及在尝试修改成员变量时的编译器错误提示。
摘要由CSDN通过智能技术生成

在C++中,常函数(const member functions)是指在类的成员函数声明和定义中使用 const 关键字修饰的函数。常函数的存在主要是为了在类的实例上提供一种保证:该函数不会修改类的成员变量。

在类的成员函数声明中,如果函数不会修改类的成员变量,可以将其声明为常函数。

常函数的格式
void myFunction() const{
        //函数体
};

在这个示例中,myFunction() 被声明为常函数,表示它不会修改任何类的成员变量。在函数体中,可以访问类的成员变量,但不能修改它们。否则编译器会报错。常函数主要用于表示对类的只读操作,从而提供了一种保证,使得编译器可以在调用时进行更严格的类型检查。常函数可以在常对象上调用,这样就可以确保常对象的成员变量不会被修改。

示例:
class RolePlayer {
public:
    //构造函数(带初始化列表)
    RolePlayer(int HP) : m_nHP(HP){};
        
    //深拷贝
    void SetName(char * m_NPCName) {
    this->m_NPCName = new char[strlen(m_NPCName) + 1];
    memset(this->m_NPCName,0, strlen(m_NPCName) + 1);
    strcpy(this->m_NPCName, m_NPCName);
    }
        
    //常函数
    void printInfo() const{
        std::cout << "Role HP:" << m_nHP << std::endl;
        std::cout << "Role Name:" << m_NPCName << std::endl;
    }
    
private:
    char * m_NPCName = nullptr;
    int m_nHP = 0;   
}

printInfo() 函数被声明为常函数,并在其中打印了角色玩家的信息。即使我们尝试在常对象上调用 printInfo() 函数,编译器也会保证该函数不会修改任何成员变量。

(关于深拷贝以及构造函数如果不清楚可以查看我之前的文章)

在主程序中调用
int main() {
    RolePlayer roleA(400);
    char szName[] = "Wolven";
    roleA.SetName(szName);
    roleA.printInfo();
    system("pause");
    return 0;
}

最后结果:

在示例中创建了一个 RolePlayer 对象 roleA,并通过构造函数传入了参数 400,接着,使用 SetName 方法将名字设置为 "Wolven"。然后,调用了 printInfo 方法,打印了角色玩家的信息。由于 printInfo 方法被声明为常函数,它不会修改任何成员变量,因此可以在常对象上安全地调用它,而编译器会确保这一点。

假如这个时候在常函数中添加了修改成员变量的内容,那么程序就报错:

  • 16
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值