首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

const成员函数不允许什么?

在C++中,const成员函数是一种特殊类型的成员函数,它不能修改类的成员变量。当一个成员函数被声明为const时,它的函数定义中只能访问类的const成员变量,而不能修改非const成员变量。这样做的目的是为了保护数据的完整性,确保在不改变对象状态的情况下调用成员函数。

以下是一些关于const成员函数的限制:

  1. 不能修改类的非const成员变量。
  2. 不能调用非const成员函数。
  3. 不能返回指向类的非const成员的指针或引用。

const成员函数的声明方式如下:

代码语言:cpp
复制
class MyClass {
public:
    void myFunction() const; // 声明一个const成员函数
};

在这个例子中,myFunction()是一个const成员函数,它不能修改类MyClass的任何成员变量。如果需要在该函数中修改成员变量,可以将其声明为非const成员函数。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

c++之const修饰成员函数

函数成员函数后加const后我们称这个函数为常函数; 常函数不可以修改成员属性 成员属性声明时加关键字mutable后,在常函数中依然可以修改 常对象: 声明对象前加const 常对象只能调用常函数...;//用mutable修饰的为特殊变量,可以在常量函数中修改 void showPerson() const{ //this指针的本质是指针常量,指针的指向是不可以修改的...this = NULL; //即Person* const this; //在函数后面加了const之后,变成const Person* const this...void showPerson() const{ cout << "这是常函数" << endl; } }; void test() { const Person...p;//在对象前加const,变为常对象 //常对象不能调用普通成员变量 p.age = 10; //特殊变量,在常对象下也可以修改 p.tmp = 20; /

63310

C++中的const成员变量和成员函数

在类中,如果你不希望某些数据被修改,可以使用const关键字加以限定。const 可以用来修饰成员变量和成员函数。...const成员函数(常成员函数const 成员函数可以使用类中的所有成员变量,但是不能修改它们的值,这种措施主要还是为了保护数据而设置的。const 成员函数也称为常成员函数。...我们通常将 get 函数设置为常成员函数。读取成员变量的函数的名字通常以get开头,后跟成员变量的名字,所以通常将它们称为 get 函数。...需要强调的是,必须在成员函数的声明和定义处同时加上 const 关键字。...函数头部的结尾加上 const 表示常成员函数,这种函数只能读取成员变量的值,而不能修改成员变量的值,例如char * getname() const

21530

C++中const和非const对象分别调用const和非const成员函数

一、先来提出问题 const对象可以调用非const成员函数吗? 非const对象可以调用const成员函数吗? const成员函数内可以调用其它的非const成员函数吗?...非const成员函数内可以调用其他的const成员函数吗?...二、实践出真知 1、const对象可以调用const成员函数 2、const对象不能调用非const成员函数 3、非const对象可以调用const成员函数 4、非const对象可以调用非const成员函数...test* this,即这时会出现类型不匹配的错误,在visual studio 中会出现类似于下面的错误: 4 所以通过上面的说明,我们知道了为什么const 对象不能调用非const成员函数。...下面解释为什么const 对象可以调用const成员函数, 1 class test{ 2 public: 3 void print()const; 4 }; 前面我们把非const成员函数print

1.2K20

const修饰类中成员变量及函数

const在类中,可以修饰成员变量和成员函数,主要目的也是保护成员内部的一些属性不被轻易的修改。以保证数据的完整性。下面分别介绍const修饰成员变量和成员函数。...const修饰成员变量表示成员常量,只能在初始化列表中赋值,可以被const和非const成员函数调用,但不能修改其值。...= 300; } ~CConst(void); private: // const 成员变量 const int iValue; }; const修饰成员函数目的是不让函数修改类内部的数据成员,而且不会调用其他非...const成员函数(如果调用则编译出错) #include using namespace std; class CConst { public: // 在初始化列表初始化const成员函数...CConst(void):x(200), y(300){} // const 成员函数中的const修饰符只能在函数名后面 void display() const { // 不能调用非const函数

21820

【C++】const对象和const成员

如果一个对象被定义成const对象,那么它就不能调用这个类中的非const成员函数const对象调用的成员函数一定都得是const!...\mian.cpp 34 1 test2 其实就是告诉我们const对象不能引用非const成员函数什么要有这个规则: 因为在非const成员函数内部可能对对象进行修改,比如set...函数 这个规则也就是强制用户不要对const成员进行错误的修改 const成员 1.const数据成员 也就是变量,比如实例中的m_hour,m_minute是普通数据成员 在类内部使用const...3.const成员函数 const成员函数只能被const对象引用。const成员函数内可以引用const数据成员,也可以引用非const数据成员,但不能修改非const数据成员的值。...但不能调用非const成员函数

1.1K10

【C++】const成员

2. const成员const修饰的“成员函数”称之为const成员函数const修饰类成员函数,实际修饰该成员函数隐含的this指针,表明在该成员函数中不能对类的任何成员进行修改。...Date d1(2024, 1, 1); d1.Print(); return 0; } 在这里为什么不能调用printf呢?...总之: 成员函数,如果是一个对成员变量只进行读访问的函数,建议加const,这样const对象和非const对象都能使用。...来看看下面的几个问题: const对象可以调用非const成员函数吗? 不行,权限放大了 非const对象可以调用const成员函数吗?...可以,这里权限缩小 const成员函数内可以调用其它的非const成员函数吗? 不行,权限放大了 非const成员函数内可以调用其它的const成员函数吗?

11610

const成员函数一定是线程安全的吗?

cbegin和 cend都返回 const_iterator型别,甚至对于非 const 容器也是如此 //并且需要记住:STL一些成员函数取用指示位置的迭代器,例如插入,删除,它们也要求使用 const_iterator...和成员函数是否带有 const声明是一样的。...// • 比起非 constexpr 对象或 constexpr 函数而言, constexpr 对象或是constexpr 函数可以用在一个作用域更广的语境中 条款16:保证const成员函数的线程安全性...//宗旨:多个线程同时调用带有 const成员函数,如何保证线程的安全性 //const成员函数就一定是线程安全的吗?...成员函数意味着只读,多个线程在没有同步的条件下执行读操作是安全的 //但是,本案例并不安全,roots()虽然是const成员函数,但是企图改变两个 mutable的成员变量的值 //方法一:保证 const

1.1K20

【C++】C++ 类中的 this 指针用法 ② ( 常量成员函数 | const 修饰成员函数分析 )

一、常量成员函数 1、const 修饰成员函数分析 在 C++ 类中 , 普通的非静态成员函数 , 可以使用 const 进行修饰 , 在 下面的 Student 类中 , 定义了 void fun(int...age, int height) 成员函数 , 下面使用 const 关键字修饰该类 ; 使用 const 修饰 成员函数 , 写法如下 , 在 fun() 之后使用 const 关键字修饰 函数 :...年龄 int height; // 身高 }; 2、常量成员函数 使用 const 关键字 修饰成员函数 , 会将 成员函数 转化为 " 常量成员函数 " ; " 常量成员函数 " 中 操作限制 :...不能修改成员变量 : 不能修改 任何 成员变量 值 , 静态成员变量 与 非静态普通成员变量 都不能修改 ; 不能调用非常量成员函数 : 只能调用 " 常量成员函数 " , 不能调用 非常量成员函数...const int age; // 年龄 const int height; // 身高 如果 成员函数const 关键字 声明为 常量成员函数 , 则在该函数中 不能修改 类对象中的 任何成员变量

18820

【C++类和对象】const成员函数及流插入提取

目录 前言 1.const成员函数 2.取地址以及const取地址操作符重载 3.流插入流提取运算符重载 4.结语 1.const成员函数 const成员函数是指在函数声明和定义时使用const关键字修饰的成员函数...注意: const成员函数内不可以调用其它的非const成员函数const成员函数内是不允许调用非const成员函数的。因为const成员函数被声明为const,它承诺了不会修改类的成员变量。...非const成员函数内可以调用其它的const成员函数const成员函数内可以调用其他的const成员函数。...const成员函数表示该函数不会修改类的成员变量,因此在非const成员函数内调用const成员函数是安全的。...const对象不可以调用非const成员函数 const对象的成员函数被隐式地视为const成员函数,因此只能调用const成员函数,而不能调用非const成员函数

10410

【C++】 类与对象——流操作符重载,const成员函数

(Date* this, ostream& out) 作为成员函数重载,this指针占据第一个参数,Date必须是左操作数!...那为了规避这个问题,我们就要把函数中参数的顺序改变,所以我们的重载就不能是成员函数。...我们把重载<<作为全局函数来看呢 这时我们可以正确的输出了,但是代价是我们成员变量改为公有了,不然我们在重载<<函数无法访问成员变量,这就让我们这个类变得不够安全,所以这里使用友元来解决。...: 所以需要加入const修饰: 对于一些只读的函数,我们可以都加上const 让代码鲁棒性更加强大。...; //展示日期 void show() const; // 全缺省的构造函数 Date(int year = 1900, int month = 1, int day = 1); // 拷贝构造函数

10310

什么不允许使用 Java 静态构造函数

不允许使用 Java 静态构造函数,但是为什么呢?在深入探讨不允许使用静态构造函数的原因之前,让我们看看如果要使 构造函数静态化 会发生什么。...因此,如果我们将构造函数设置为静态,则无法初始化对象变量。这将破坏使用创建对象的构造函数的全部目的。因此,使构造函数为非静态是合理的。 注意,我们不能this在静态方法中使用引用对象变量。...我们可以定义一个类层次结构,其中子类构造函数调用超类构造函数。这是通过super()方法调用完成的。大多数情况下,JVM自动调用超类构造函数,但有时如果超类中有多个构造函数,我们必须手动调用它们。...count is class variable //and shared among all the objects of the class count=c; } } 总结 我们说明了为什么不允许使用...Java静态构造函数

3K70

【C++】静态成员函数 ( 静态成员函数概念 | 静态成员函数声明 | 静态成员函数访问 | 静态成员函数只能访问静态成员 )

一、静态成员函数简介 1、静态成员函数概念 静态成员函数归属 : 在 C++ 类中 , 静态成员函数 是一种 特殊的函数 , 该函数属于类 , 而不是属于 类实例对象 ; 静态成员函数调用不依赖于对象...: 即使 没有创建 类 的 实例对象 , 也可以 通过 类名:: 调用 类中定义的 静态成员函数 ; 静态成员函数作用 : 静态成员函数 通常用于 执行与类本身相关的操作 , 执行该函数 不涉及到 类实例对象中的信息..., 也不能在 静态成员函数 中访问 普通的 成员变量 和 成员函数 ; 2、静态成员函数声明 静态成员函数声明 : 使用 static 关键字 修饰 成员函数 , 就可以将 普通的成员函数 转为 静态成员函数...调用 静态成员函数 s.fun(); 4、静态成员函数只能访问静态成员 静态成员函数内容要求 : 静态成员函数 只能访问 静态成员变量 其他静态成员函数 静态成员函数 不能访问 非静态成员变量 或 非静态成员函数..., 普通的 成员变量 和 成员函数 , 需要 通过 类 的 实例对象 来访问 , 需要 依托于 对象才能存在 , 而 静态成员函数 可以在 不创建 实例对象的前提下被调用 , 因此 静态成员函数中 不能访问

31620

【C++】类和对象---const成员,取地址及const取地址操作符重载,static成员

const成员const修饰的“成员函数”称之为const成员函数const修饰类成员函数,实际修饰该成员函数 隐含的this指针,表明在该成员函数中不能对类的任何成员进行修改。...Date d2(2022, 1, 13); d2.Print(); } 运行结果: 左图中有两个Print()函数,一个是const成员函数,另一个不是const成员函数 右图中只有一个const...成员函数的Print() 对比两个的运行结果可以发现: const对象只能调用const成员函数const对象既可以调用const成员函数,也可以调用非const成员函数 请思考下面的几个问题:...不可以,const修饰了隐藏的this指针,调用非const成员函数属于权限的放大,不可行。 2. 非const对象可以调用const成员函数吗?...非const成员函数内可以调用其它的const成员函数吗?

10510

C++类的成员函数 | 成员函数

C++成员函数的性质 在C++中,类的成员函数函数的一种,它有返回值和函数类型,它与一般函数的区别只是:  属于一个类的成员,出现在类体中。...C++在使用类函数时,要注意调用它的权限以及它的作用域,私有的成员函数只能被本类中的其他成员函数所调用,而不能被类外调用,成员函数可以访问本类中任何成员,可以引用在本作用域中有效的数据。 ...一般的做法是将需要被外界调用的成员函数指定为 public,它们是类的对外接口,但应注意,并非要求把所有成员函数都指定为 public。...这种函数的作用是支持其他函数的操作,是类中其他成员函数,类外用户不能调用这些私有的函数。  类的成员函数是类体中十分重要的部分。...C++类外定义成员函数 上述所讲成员函数是在类体中定义的,在C++中也可以在类体中只写成员函数的声明,而在类的外面进行函数定义。

1.8K74

C++_const 常量成员以及成员初始化列表及其常量类

常量成员以及成员初始化列表 1.知识点介绍 常量成员,指的是在C++类中声明对象成员时可以加上const关键字,这样声明的成员叫常量成员, 常量成员分为常量数据成员和常量函数成员 2.常量数据成员...3.成员初始化列表 常量数据成员也在构造函数范围内, 但是常量数据成员值无法改变....2、一些特殊情况下,数据成员的初始化只能用初始化列表的方式给数据成员赋值,而不能在构造函数中 直接赋值 3、初始化列表必须写在构造函数的定义体后面 4、构造函数能对数据的初始化工作,初始化列表也可以,...const; // 类内声明 }; void CA::fun1() const // 类外实现 { } 特点: 类中的常量函数成员, 在这个函数中不能对自身变量进行修改,通过语法限定....常量对象中的任何数据成员都不能改变, 只能调用对象中的常量函数成员.

95230
领券