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语言结构体简单入门讲解

    C语言结构体简单入门讲解

    这篇文章主要介绍了C语言结构体简单入门讲解,本文讲述了结构体的基本定义和操作,讲解了几个比较实用的函数和案例,希望对你有所帮助
    2021-06-06
  • 详解C++中赋值和输入输出语句的用法

    详解C++中赋值和输入输出语句的用法

    这篇文章主要介绍了详解C++中赋值和输入输出语句的用法,是C++入门学习中的基础知识,需要的朋友可以参考下
    2015-09-09
  • C++使用模板类实现链式栈

    C++使用模板类实现链式栈

    这篇文章主要为大家详细介绍了C++使用模板类实现链式栈,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • 简要对比C语言中的dup()函数和dup2()函数

    简要对比C语言中的dup()函数和dup2()函数

    这篇文章主要介绍了简要对比C语言中的dup()函数和dup2()函数,是C语言入门学习中的基础知识,需要的朋友可以参考下
    2015-08-08
  • Opencv LBPH人脸识别算法详解

    Opencv LBPH人脸识别算法详解

    这篇文章主要为大家详细介绍了Opencv LBPH人脸识别算法的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05
  • C++ primer类的基础精讲

    C++ primer类的基础精讲

    C++类,是指系统在第一次在程序中遇到一个类时为这个类建立它的所有类变量的拷贝 - 这个类的所有实例共享它的类变量
    2022-07-07
  • c++关键字const的用法详解

    c++关键字const的用法详解

    在类中,如果你不希望某些数据被修改,可以使用const关键字加以限定。const 可以用来修饰成员变量、成员函数以及对象,希望能够给你带来帮助
    2021-09-09
  • QT树的具体项目实现

    QT树的具体项目实现

    本文主要介绍了QT树的具体项目实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • C/C++ Qt 数据库与TreeView组件绑定详解

    C/C++ Qt 数据库与TreeView组件绑定详解

    本篇文章主要介绍了QT数据库与View组件的绑定,通过数据库与组件关联可实现动态展示数据库中的表记录。感兴趣的小伙伴可以了解一下
    2021-12-12
  • 使用Matlab制作大富翁小游戏的过程详解

    使用Matlab制作大富翁小游戏的过程详解

    大富翁大家都玩过,走到建筑的位置可以买地,第二圈走到买过的地可以升级,别人经过后需要付过路费,每次经过起点都会获得一定资金,玩到最后还没破产的就是胜者,本文将制作一个Matlab版的大富翁小游戏,需要的可以参考一下
    2022-02-02

最新评论