C++ 常函数修改数据成员一题

1、问题描述

有类如下

class A_class
{
    void f() const
    {
        ...
    }
};

在上面这种情况下,如果要修改类的成员变量,该怎么办?

2、析

C++中,类的数据成员加上mutable后,修饰为const的成员函数,就可以修改它了 。

3、举例如下

测试类头文件,Asa.h

#ifndef ASA_H
#define ASA_H

class Asa
{
public:
    Asa();
    int incr() const;

private:
    mutable int mobi;
};

#endif // ASA_H

测试类实现体,Asa.cpp

#include "asa.h"

Asa::Asa()
{
    this->mobi = 0;
}

int Asa::incr() const
{
    return ++mobi;
}

主类的调用main.cpp

#include <iostream>
#include "asa.h"

using namespace std;

int main()
{
    Asa *p = new Asa();
    cout << p->incr() << endl;

    return 0;
}
时间: 2025-01-09 00:41:36

C++ 常函数修改数据成员一题的相关文章

mutable用于修改const成员函数中的成员变量

http://no001.blog.51cto.com/1142339/389840/ mutalbe的中文意思是“可变的,易变的”,跟constant(既C++中的const)是反义词. 在C++中,mutable也是为了突破const的限制而设置的.被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中. 我们知道,如果类的成员函数不会改变对象的状态,那么这个成员函数一般会声明成const的.但是,有些时候,我们需要在const的函数里面修改一些跟类状态无关的数据成员,

函数和数据的继承及访问权限

C++通过类派生(Class Derivation)的机制支持继承(Inheritance).允许程序员在保持原有类特性的基础上进行扩展,增加功能,派生出新类. 继承的方式有以下2种:单一继承和多重继承. 派生类的定义中包括子类新增加的成员和继承父类需要重写的成员.C++允许在派生类中重新声明和定义这些成员函数,使这些函数具有新的功能,称之为重写或覆盖.重写函数起屏蔽.更新作用,取代基类成员,完成新功能. 测试一:子类继承基类的所有属性和函数,设基类函数和数据均为public类型,并且以publ

第十六周oj刷题——Problem C: B 求类中数据成员的最大值-类模板

Description 声明一个类模板,类模板中有三个相同类型的数据成员,有一函数来获取这三个数据成员的最大值. Input 分别输入3个整数,3个浮点数,3个字符 Output 3个整数的最大值 3个浮点数中的最大值 3个字符中的最大值 Sample Input 9 5 6 1.1 3.4 0.9 a b c Sample Output 9 3.40 c /* All rights reserved. * 文件名称:test.cpp * 作者:陈丹妮 * 完成日期:2015年 6 月 25 日

sdut 3-6 静态数据成员与静态成员函数

3-6 静态数据成员与静态成员函数 Time Limit: 1000MS Memory limit: 65536K 题目描述 通过本题目的练习可以掌握静态数据成员和静态成员函数的用法 要求设计一个点类Point,它具有两个double型的数据成员x,y.和一个静态数据成员count ,用以记录系统中创建点对象的数目.为该类设计构造函数和析构函数,在其中对count的值做修改,体现点的数目的动态变化.并为其添加一个静态成员函数用以输出count的值:成员函数showPoint()用于输出点的信息.

C++静态数据成员与静态成员函数

一般情况下,如果有n个同类的对象,那么每一个对象都分别有自己的数据成员,不同对象的数据成员各自有值,互不相干.但是有时人们希望有某一个或几个数据成员为所有对象所共有,这样可以实现数据共享. 可以使用全局变量来达到共享数据的目的.例如在一个程序文件中有多个函数,每一个函数都可以改变全局变量的值,全局变量的值为各函数共享.但是用全局变量的安全性得不到保证,由于在各处都可以自由地修改全局变量的值,很有可能偶然失误,全局变量的值就被修改,导致程序的失败.因此在实际工作中很少使用全局变量. 如果想在同类的

C++基础(静态数据成员和静态成员函数)

[1.静态成员] 1.静态数据成员与全局变量一样都是静态分配存储空间的,在编译时,就要为类的静态数据成员分配存储空间.但全局变量在程序中的任何位置都可以访问它,而静态数据成员受到访问权限的约束.必须是public权限时,才可能在类外进行访问. 2.静态数据成员的初始化 (1)*静态数据成员的初始化是在类的源文件(.cpp)中,而不是在类的头文件(.h)中进行的.这是因为类声明位于头文件中,程序可能将头文件包括在其他几个文件中.如果在头文件中进行初始化,将出现多个初始化语句副本,从而引发错误. A

【转载】C/C++杂记:深入理解数据成员指针、函数成员指针

原文:C/C++杂记:深入理解数据成员指针.函数成员指针 1. 数据成员指针 对于普通指针变量来说,其值是它所指向的地址,0表示空指针.而对于数据成员指针变量来说,其值是数据成员所在地址相对于对象起始地址的偏移值,空指针用-1表示.例: 代码示例:   2. 函数成员指针 函数成员指针与普通函数指针相比,其size为普通函数指针的两倍(x64下为16字节),分为:ptr和adj两部分. (1) 非虚函数成员指针 ptr部分内容为函数指针(指向一个全局函数,该函数的第一个参数为this指针),ad

静态数据成员与静态成员函数

静态属性不是类中每个对象拥有的,而是共有的.由于静态成员逃离了对象而存在的性质,所以该实体应该在所有对象产生之前产生,更适合的时机是在程序启动的时候做初始化.初始化时候不可重复上static,但是要加上类名空间.该实体在程序中的唯一性,要求他不可以和类的定义放在头文件中,但是它确实是类的成员,所以放在类实现中最合适.如下: //--------------------Student.h ---类定义的文件 class Student{ private: static int num; } //-

在赋值运算符函数中,类的实例能直接访问私有数据成员???

印象中,private的数据成员只能在类的成员函数中使用,无法通过类的对象直接访问!(错误理解) 正确的理解是:在类的成员函数中,可以直接访问私有成员.即只要在该类的成员函数中,无论是直接访问该类的私有数据成员,还是访问某个对象(必选是该类型)的私有数据成员,均是可以的!!! 借鉴网上(http://blog.csdn.net/iaccepted/article/details/34853937 )的说法就是: 实践证明,类(class)私有成员可以被类成员函数访问,不区分成员在哪个实例(ins