精华内容
下载资源
问答
  • 将const修饰的类成员函数称之为const成员函数,const修饰类成员函数,实际修饰该成员函数隐含的this指针,作用是在该成员函数不能对类的任何成员进行修改。 格式: 类型说明符 函数名(参数表)const; 例如:...

    const修饰类的成员函数–常成员函数

    将const修饰的类成员函数称之为const成员函数,const修饰类成员函数,实际修饰该成员函数隐含的this指针,作用是在该成员函数中不能对类的任何成员进行修改。

    格式: 类型说明符 函数名(参数表)const;
    例如:void showDate()const;

    说明:
    1、常成员函数可以访问常数据成员,也可以访问普通数据成员。常数据成员可以被常成员函数访问,也可以被普通成员函数访问。
    2、如果将有一个对象说明为常对象,则通过通过该对象只能调用它的常成员函数,而不能调用普通成员函数。常成员函数是常对象唯一的对外接口。
    3、常成员函数不能更新对象的数据成员,也不能调换该类中的普通成员函数,保证了在常成员函数中绝对不会更新数据成员的值。

    常引用

    格式: const 类型 & 引用名;
    例如: int a=1; const int &b=a;
    其中b是一个常引用,他所引用的对象不允许更改。如果出现 b=12; 则是非法的
    在实际应用中,常引用往往用来作为函数的形参,这样的参数成为常参数。

    常成员函数和普通成员函数的访问特性比较

    数据成员 普通成员函数 常成员函数
    普通数据成员 可以访问,也可以改变值 可以访问,但不可以改变值
    常数据成员 可以访问,但不可以改变值 可以访问,但不可以改变值
    常对象 不可以访问,也不可以改变值 可以访问,但不可以改变值
    展开全文
  • C++常量成员函数

    2019-03-24 21:32:01
    常成员函数是指由const修饰符修饰的成员函数,在常成员函数中不得修改类中的任何数据成员的值。 二、使用规则 1、const成员函数应该在函数原型说明和函数定义中都增加const限定 2、非常量成员函数不能被常量成员...

    一、常量成员函数的定义
    常成员函数是指由const修饰符修饰的成员函数,在常成员函数中不得修改类中的任何数据成员的值。
    二、使用规则
    1、const成员函数应该在函数原型说明和函数定义中都增加const限定
    2、非常量成员函数不能被常量成员对象调用,因为它可能企图修改常量的数据成员
    3、但构造函数和析构函数对这个规则例外,它们从不定义为常量成员,但可被常量对象调用(被自动调用)。它们也能给常量的数据成员赋值,除非数据成员本身是常量。
    4、常量成员函数不修改对象。
    5、常量成员函数在定义和声明中都应加const限定
    6、非常量成员函数不能被常量成员函数调用,但构造函数和析构函数除外。
    7、常量(const 对象)对象只能调用常量成员函数。const对象的数据成员在对象生命周期内不能改变,因此只能调用常成员函数。
    8、将成员变量counter设置为mutable就可以在“void Foo() const”函数中修改counter的值了。

    展开全文
  • 这里注意的是,类的成员函数如果加了const,就表明该函数不能对该类的成员数据进行任何修改,一旦修改就会报错,称之为函数。反之可以修改。如下 public: bool same_isbn(const Sales_item &rhs) ...

    今天学习一下类的成员函数,首先讲一下常规的类外的函数

    写在类的外部的函数叫做全局函数,不属于任何的类。
    如果写在类的里面就叫做类的成员函数

    这里注意的是,类的成员函数如果加了const,就表明该函数不能对该类的成员数据进行任何的修改,一旦修改就会报错,称之为常函数。反之可以修改。如下

    public:
        bool same_isbn(const Sales_item &rhs) const//不能修改成员函数,但是可以调用
        {
            return isbn == rhs.isbn;//isbn就是代表当前对象的书号,传入的isbn是作为参数的另外一个对象的书号
        }

     

    那么类的成员函数可以定义在类的外部么?
    答案是肯定的!!
    如果我们想把类的成员函数定义在外面,则需要事先在类的内部声明好该函数,举例如下

    class Sales_item
    {
    public:
        std::string isbn;//书号
        unsigned  units_sold;//数量
        double revenue;//销售额

    public:
        double avr_price() const;//函数声明在类的内部

        bool same_isbn(const Sales_item &rhs) const//不能修改成员函数,但是可以调用
        {
            return isbn == rhs.isbn;//isbn就是代表当前对象的书号,传入的isbn是作为参数的另外一个对象的书号
        }
    };

    double Sales_item::avr_price() const//定义在类的外部
    {
    }

      

    但是需要注意的是,在类的外部定义类的成员函数的时候需要在函数的名称前加上“::”,再在前面加上类的名称,其中“::”称为范围解析,表示该函数属于这个类

    一般类的成员函数声明都写在类的内部,函数的定义都写到外面。这样会使得类的结构看起来很整洁。

    总体的练习代码如下:

    #include<iostream>
    #include<string>
    #include<stdlib.h>
    using namespace std;
    //销售项目
    int sum(int x, int y)
    {
        return x + y;
    }

    class Sales_item
    {
    public:
        std::string isbn;//书号
        unsigned  units_sold;//数量
        double revenue;//销售额

    public:
        double avr_price() const;//函数声明在类的内部

        bool same_isbn(const Sales_item &rhs) const//不能修改成员函数,但是可以调用
        {
            return isbn == rhs.isbn;//isbn就是代表当前对象的书号,传入的isbn是作为参数的另外一个对象的书号
        }
    };

    double Sales_item::avr_price() const//定义在类的外部
    {
    }

    int main()
    {
        Sales_item item1, item2;
        item1.isbn = "45646-78786";
        item1.units_sold = 10;
        item1.revenue = 300;

        item2.isbn = "45646-786";
        item2.units_sold = 2;
        item2.revenue = 70;

        if (item1.same_isbn(item2))
            cout << "这两个是相同的书 ";
        else
            cout << "这两个是不同的书 ";
        system("pause");
    }

      

    最后,给大家一些类的代码书写方面的建议,为了代码整体的美观和方便类的调用,因此一般将类的定义都写在头文件中,类的成员函数的声明在类中,函数的具体的定义都写在Cpp源码文件中,然后包含类定义的头文件包含进来,这样既美观易懂,而且也方便添加新的成员函数。

    ————————————————
    版权声明:本文为CSDN博主「wD丶路人」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/Peter_Red_Boy/article/details/90004417

    展开全文
  • 常函数(C++)

    千次阅读 2018-10-25 15:29:28
    作为类的成员函数,常函数不能修改任何本类的数据成员,除非本类数据成员有“mutable”关键字修饰。 关于常函数: 关于C++中,类的常成员函数 声明样式为: 返回类型 &amp;amp;amp;lt;类标识符::&amp;amp;...

    举例

    bool functionName() const;
    

    解释:声明了一个名为functionName的函数,该函数的返回值是bool类型。是一个常函数。
    常函数
    作为类的成员函数,常函数不能修改任何本类的数据成员,除非本类数据成员有“mutable”关键字修饰。
    关于常函数
    关于C++中,类的常成员函数
    声明样式为: 返回类型 <类标识符::>函数名称(参数表) const
    说明:
    1. const是函数声明的一部分,在函数的实现部分也需要加上const
    2. const关键字可以重载函数名相同但是未加const关键字的函数
    3. 常成员函数不能用来更新类的任何成员变量,也不能调用类中未用const修饰的成员函数,只能调用常成员函数。即常成员函数不能更改类中的成员状态,这与const语义相符。
    4. 常函数能修改自身传入的形参。
    5. 常函数的this指针是const classname*.(因为常函数的this指针是const,所以不能用来更新所在类的任何成员。)

    展开全文
  • 对象和常量  常对象。常对象指在任何场合都不能对其成员的值进行修改的对象。 定义常对象的形式为: const类名 对象名(参数列表); ... 常数据成员。将对象的数据成员声明为const,...常成员函数不能修改类中的成员数
  • C++学习笔记:对象

    2020-01-23 14:22:06
    常对象数据成员 只能通过构造函数的参数初始化表对常数据成员进行初始化,任何其他函数都不能对常...如果将成员函数声明为常成员函数,则只能引用本类中的数据成员,而不能修改它们。 列如: void get_time()cons...
  • 2016.5.21读书笔记

    2016-05-21 23:10:27
    1、如果一个对象被声明为常对象,则通过该对象只能调用它的常成员函数,而不能调用该对象的普通成员函数:void get_time() const; 2、常成员函数可以访问常对象中的数据...4、常成员函数不能调用另一个非const成员函数
  • C++中const型数据小结

    2020-12-06 10:46:31
    fun是Time类中的常成员函数,可以引用,但不能修改本类中的数据成员 Time* const p; p是指向Time类对象的常指针变量,p的值(p的指向)不能改变 const Time* p; p是指向Time类常对象的指针变量,p指向的类对象的...
  • 1. 物理常量性:当且仅当函数不修改任何成员数据时,可以使用const修饰成员函数。 2. 逻辑常量性:常成员函数仅可以在使用者未察觉的情况下修改成员数据。物理常量性的观点是不能说得通的,非const版的成员函数中...
  • C++ const 总结

    2013-11-22 19:38:19
    主要探索台类中使用: 包括const 对象,const数据成员,const成员函数,...3 不能调用该对象的非const型的成员函数,为了防止修改数据成员的值 具体使用: #include #include using namespace std; class student
  • const与constexpr

    2016-03-24 19:51:00
    关于const型数据,谭浩强老爷子这么总结道: ... 4 //fun是Time类中的常成员函数,可以引用,但不能修改本类中的数据成员 5 Time * const p; 6 //p是指向Time类对象的常指针变量,p的指向不能改变 7 ...
  • 数据结构(C++)有关练习题

    热门讨论 2008-01-02 11:27:18
    2、要求的图如下,也可以自己构造图,但是需要注意的是,图不能是退化的单链表: 实验报告要求: 1、 按要求记录下图的类的完整实验代码; 2、 纪录你所使用的图; 3、 按要求记录下要求的输出...
  • C++const

    2020-07-11 09:45:29
    const修饰指针变量时: 只有一个const时,如果const位于*的左侧...const修饰引用时,不能修改引用对象的任何成员,好处是可以保护传递参数,不需要一个新的参数副本。 const修饰返回值 使用const修饰引用类型的一个
  • 不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。 接口(interface)...
  • 式定义时,将如何隐式地生成成员函数以及这些成员函数的行为。读者还将通过使用对象指针,了解队列 模拟问题,扩充类方面的知识。 第13章:类继承 在面向对象编程中,继承是功能最强大的特性之一,通过继承,...
  • 式定义时,将如何隐式地生成成员函数以及这些成员函数的行为。读者还将通过使用对象指针,了解队列 模拟问题,扩充类方面的知识。 第13章:类继承 在面向对象编程中,继承是功能最强大的特性之一,通过继承,...
  • 式定义时,将如何隐式地生成成员函数以及这些成员函数的行为。读者还将通过使用对象指针,了解队列 模拟问题,扩充类方面的知识。 第13章:类继承 在面向对象编程中,继承是功能最强大的特性之一,通过继承,...
  • php高级开发教程说明

    2008-11-27 11:39:22
    当然,有了一个日益增大的免费工具函数库,依然不能满足全部需要,也不能优化这个库 以适应特殊需求,有些库太庞大以致不能随处安装,因为每一次选中都必须分析几百K字节的代 码,这将严重降低站点的性能。在这种...
  • 3.8.5 使用成员函数的算法 56 3.8.6 标准库算法 56 3.9 数学 57 3.9.1 复数 57 3.9.2 向量算术 57 3.9.3 基本数值支持 58 3.10 标准库功能 58 3.11 忠告 58 第一部分 基本功能 第4章 类型和声明 63 4.1 ...
  • 3.8.5 使用成员函数的算法 56 3.8.6 标准库算法 56 3.9 数学 57 3.9.1 复数 57 3.9.2 向量算术 57 3.9.3 基本数值支持 58 3.10 标准库功能 58 3.11 忠告 58 第一部分 基本功能 第4章 类型和声明 63 4.1 ...
  • C++程序设计语言(特别版)--源代码

    热门讨论 2012-04-23 07:33:51
    3.8.5 使用成员函数的算法 56 3.8.6 标准库算法 56 3.9 数学 57 3.9.1 复数 57 3.9.2 向量算术 57 3.9.3 基本数值支持 58 3.10 标准库功能 58 3.11 忠告 58 第一部分 基本功能 第4章 类型和声明 63 4.1 ...
  • C++MFC教程

    热门讨论 2013-05-21 13:37:15
    4、窗口句柄:说到消息就不能不说窗口句柄,系统通过窗口句柄来在整个系统中唯一标识一个窗口,发送一个消息时必须指定一个窗口句柄表明该消息由那个窗口接收。而每个窗口都会有自己的窗口过程,所以用户的输入就会...
  • C#微软培训教材(高清PDF)

    千次下载 热门讨论 2009-07-30 08:51:17
    本书着重介绍语言本身,比较少涉及应用,不错的入门书,从头讲起,不怕明白。 <<page 1>> page begin==================== 目 目目 目 录 录录 录 第一部分 C#语言概述.4 第一章 第一章第一章 第...
  • C#微软培训资料

    2014-01-22 14:10:17
    10.3 构造函数和析构函数 .119 10.4 小 结 .122 第十一章 方 法 .124 11.1 方法的声明.124 11.2 方法中的参数.125 11.3 静态和非静态的方法.129 11.4 方法的重载.130 11.5 操作符重载.134 11.6 小 ...
  • 而软件开发过程是一种高密集度的脑力劳动,软件开发的模式及技术 不能适应软件发展的需要。致使大量质量低劣的软件涌向市场,有的花费大量人力、财力, 而在开发过程中就夭折。软件危机主要表现在两个方面: (1) ...
  • SSO-WebDemo

    2013-08-12 20:25:57
    这三个Web应用之所以没有打成war包,是因为它们不能直接部署,根据读者的部署环境需要作出小小的修改。样例部署和运行的环境有一定的要求,需要符合Servlet2.3以上标准的J2EE容器才能运行(例如Tomcat5,Sun ...
  • 我们并不能使同学们通过这次系列讲座成为一个 UNIX 类操作系统的高手,这次系列 讲座的目的就是在同学们中间普及 Linux 基础知识,为今后我们更加接近的了解 Linux 做一 个好的开端。 第一讲 Linux基础 在这一...

空空如也

空空如也

1 2
收藏数 28
精华内容 11
关键字:

常成员函数不能修改任何数据成员