C++ 常量成员函数学习笔记

 更新时间:2023年10月26日 09:58:32   作者:Totn  
这篇文章主要为大家介绍了C++ 常量成员函数学习笔记,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

C++ 成员函数

C++的类中, 在成员函数的函数声明有末尾使用const 修饰, 则表明该函数为常量成员函数.

它具有以下两个特点:

  • 常量性: 常量成员函数约定不会修改类的任何数据成员, 即在函数体内不能修改类的任何非静态变量和调用任何非常量成员函数.
  • 对象调用: 常量成员函数可以被常量对象和非常量对象调用, 对于常量对象, 只能调用常量成员函数;而对于非常量对象, 常量成员函数和非常量成员函数都可以调用.

(常量调常量, 非常随便调)

常量成员对象的定义

class Myclass {
public:
    void setName(const std::string& newName); // 非常量成员函数
    void print() const;                  // 常量成员函数
private: 
    std::string name;
};
void Myclass::setName(const std::string& newName) {
    name = newName;
}
// 常量成员函数, 不会修改对象自己的数据
void Myclass::print() const {
    std::cout << "Myclass name: " << name << std::endl;
}
int main() {
    Myclass myc;
    myc::setName("Good");
    myc::print(); // output: "Myclass name: Good"
    const Myclass constMycls;
    // constMycls是常量对象, 所以不能调用setName
    constMyclass::print(); // output: "Myclass name: " name是空值
}

关于常量引用

在C++中,函数参数的类型可以分为传值调用(by value)、引用调用(by reference)和常量引用调用(by const reference)三种方式。在以上代码中,const std::string& newName是使用常量引用调用方式来传递参数。

使用const关键字修饰参数类型std::string&,表示这个引用参数是一个常量引用,即在函数内部不允许修改传入的参数。这样设计的目的有以下几点意义:

  • 避免不必要的拷贝:使用常量引用作为参数,避免了对传入的字符串对象进行不必要的拷贝。如果不使用引用方式,而是直接使用std::string newName,则在函数调用时会进行一次拷贝构造,可能存在性能开销和内存消耗。
  • 支持传递常量和非常量对象:使用常量引用作为参数,可以接受传入的常量字符串(const std::string)和非常量字符串(std::string),提高了函数的通用性。
  • 保证不修改传入的参数:使用const关键字修饰参数类型,可以在函数内部明确表明该函数不会修改传入的参数,提升了代码的可读性,并保护了传入的字符串对象不会被意外修改。

总结

使用const std::string&作为参数类型,既可以避免不必要的拷贝开销,又能够支持传递常量和非常量对象,并且明确表示函数不会修改传入的参数。这样设计可以提高代码的效率和可读性。

以上就是C++ 常量成员函数学习笔记的详细内容,更多关于C++ 常量成员函数的资料请关注脚本之家其它相关文章!

相关文章

  • C++ 构造函数中使用new时注意事项

    C++ 构造函数中使用new时注意事项

    本文主要介绍了C++ 构造函数中使用new时注意事项。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • Qt实现棋盘游戏

    Qt实现棋盘游戏

    这篇文章主要为大家详细介绍了Qt实现棋盘游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • C++函数中return语句的使用方法

    C++函数中return语句的使用方法

    C++中的return语句是函数中一个重要的语句,return语句用于结束当前正在执行的函数,并将控制权返回给调用此函数的函数,需要的朋友可以了解下
    2012-12-12
  • C++实现广度优先搜索实例

    C++实现广度优先搜索实例

    这篇文章主要介绍了C++实现广度优先搜索,对于C++程序员来说非常有借鉴价值,需要的朋友可以参考下
    2014-08-08
  • C语言的程序环境与预处理你真的了解吗

    C语言的程序环境与预处理你真的了解吗

    这篇文章主要为大家详细介绍了C语言的程序环境与预处理,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • 基于QT绘制一个漂亮的预警仪表

    基于QT绘制一个漂亮的预警仪表

    这篇文章主要为大家详细介绍了如何基于QT绘制一个漂亮的预警仪表,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的可以了解一下
    2023-04-04
  • linux之awk命令的用法

    linux之awk命令的用法

    awk是一个非常棒的数字处理工具。相比于sed常常作用于一整行的处理,awk则比较倾向于将一行分为数个“字段”来处理。运行效率高,而且代码简单,对格式化的文本处理能力超强
    2013-10-10
  • Qt实现制作简单的计算器

    Qt实现制作简单的计算器

    计算器是我们生活中很常见的东西,它可以由多种语言多种方式来实现。本文主要介绍的是利用Qt实现的简易计算器的制作,文中的示例代码讲解详细,需要的可以参考一下
    2022-12-12
  • C++函数指针的用法详解

    C++函数指针的用法详解

    这篇文章主要为大家介绍了C++函数指针的用法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

    2022-01-01
  • C语言函数之memcpy函数用法实例

    C语言函数之memcpy函数用法实例

    memcpy函数用于把资源内存(src所指向的内存区域)拷贝到目标内存(dest所指向的内存区域),下面这篇文章主要给大家介绍了关于C语言函数之memcpy函数用法的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-08-08

最新评论