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++ 常量成员函数的资料请关注脚本之家其它相关文章!

相关文章

  • VS2019如何创建C++项目的实现示例

    VS2019如何创建C++项目的实现示例

    这篇文章主要介绍了VS2019如何创建C++项目的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • 常用排序算法整理分享(快速排序算法、希尔排序)

    常用排序算法整理分享(快速排序算法、希尔排序)

    这篇文章主要介绍了一些常用排序算法整理,插入排序算法、直接插入排序、希尔排序、选择排序、冒泡排序等排序,需要的朋友可以参考下
    2014-03-03
  • 一文搞懂Codec2框架解析

    一文搞懂Codec2框架解析

    这篇文章主要介绍了Codec2框架解析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • 利用Qt制作简单的日期选择界面

    利用Qt制作简单的日期选择界面

    Qt自带的日期选择控件过于丑陋与难用,所以但凡有点小想法的人都会做一个全新的日历。这篇文章就来利用Qt制作一个简单的日期选择界面,感兴趣的可以了解一下
    2023-03-03
  • 从string类的实现看C++类的四大函数(面试常见)

    从string类的实现看C++类的四大函数(面试常见)

    C++类一般包括构造函数、拷贝构造函数、析构函数和赋值函数四大函数,非常常见,本文给大家介绍从string类的实现看C++类的四大函数,一起看看吧
    2016-06-06
  • 浅谈C++中各种不同意义的new和delete的使用

    浅谈C++中各种不同意义的new和delete的使用

    本文主要介绍了浅谈C++中各种不同意义的new和delete的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • Qt扫盲篇之QRegExp正则匹配类总结

    Qt扫盲篇之QRegExp正则匹配类总结

    这篇文章主要给大家介绍了关于Qt扫盲篇之QRegExp正则匹配类总结的相关资料,QRegExp是Qt框架中的一个类,用于进行正则表达式的匹配和处理,它提供了多种模式来匹配不同的字符串,需要的朋友可以参考下
    2023-12-12
  • C++二维数组螺旋加密信息

    C++二维数组螺旋加密信息

    大家好,本篇文章主要讲的是C++二维数组螺旋加密信息,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • 一篇文章带你了解C语言浮点数之间的比较规则

    一篇文章带你了解C语言浮点数之间的比较规则

    这篇文章主要介绍了魔性的float浮点数精度问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-08-08
  • C语言中计算二叉树的宽度的两种方式

    C语言中计算二叉树的宽度的两种方式

    这篇文章主要介绍了C语言中计算二叉树的宽度的两种方式的相关资料,需要的朋友可以参考下
    2017-04-04

最新评论