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

const函数中的成员赋值

在 C++ 中,const 函数是指成员函数前面带有 const 关键字的函数。这意味着该函数不会修改对象的状态,即它不会更改对象的任何成员变量。在 const 函数中,成员变量是 const 类型的,因此必须在成员变量的声明中使用 const 关键字。

例如,假设我们有一个名为 Person 的类,其中有一个名为 name 的成员变量。我们可以将 name 声明为 const 类型,并在 const 函数中进行赋值。以下是一个示例:

代码语言:cpp
复制
class Person {
public:
    Person(const std::string& name) : name_(name) {}

    // 声明为 const 函数
    void printName() const {
        std::cout << "My name is: "<< name_<< std::endl;
    }

private:
    const std::string name_;  // 声明为 const 类型
};

在上面的示例中,printName 函数被声明为 const 函数,因此它不能修改对象的状态。在函数中,我们可以访问 name_ 成员变量,但不能对其进行修改。

需要注意的是,在 const 函数中,我们不能调用非 const 函数,因为非 const 函数可能会修改对象的状态。如果我们需要在 const 函数中调用非 const 函数,我们需要将其声明为 const 函数。

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

相关·内容

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

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

26830

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函数

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

    一、先来提出问题 const对象可以调用非const成员函数吗? 非const对象可以调用const成员函数吗? const成员函数内可以调用其它const成员函数吗?...非const成员函数内可以调用其他const成员函数吗?...5、const成员函数不能调用非const成员函数 6、非const成员函数可以调用非const成员函数 我们知道c++在类成员函数还会隐式传入一个指向当前对象this指针,所以在test类,...实际print函数应该是这样void print(test * this);,这代表一个指向test对象指针this被传入到了print函数 假如现在我们用test类创建一个对象, 1 test...* this; 是和void print() const;this指针类型是一样,所以常量对象可以调用const成员函数

    1.3K20

    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

    65210

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

    一、常量成员函数 1、const 修饰成员函数分析 在 C++ 类 , 普通非静态成员函数 , 可以使用 const 进行修饰 , 在 下面的 Student 类 , 定义了 void fun(int...年龄 int height; // 身高 }; 2、常量成员函数 使用 const 关键字 修饰成员函数 , 会将 成员函数 转化为 " 常量成员函数 " ; " 常量成员函数 " 操作限制 :...const int age; // 年龄 const int height; // 身高 如果 成员函数const 关键字 声明为 常量成员函数 , 则在该函数 不能修改 类对象 任何成员变量...(const Student* const pThis, int age, int height) // 左数右指 , const 在 * 左边修饰是内存数据, const 在 * 右边修饰是指针本身...void fun(int age, int height) const { // 常量成员函数 不能修改成员变量值 //this->age = age; //this->height

    22020

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

    等 //而不是用成员函数方式 //因此:最通用化代码会使用非成员函数,而不会假定其成员函数版本存在性 //通用模板改写 情况2代码 //在容器查找 targetVal 第一次出现位置 然后在此处插入...和成员函数是否带有 const声明是一样。...//宗旨:多个线程同时调用带有 const成员函数,如何保证线程安全性 //const成员函数就一定是线程安全吗?...成员函数意味着只读,多个线程在没有同步条件下执行读操作是安全 //但是,本案例并不安全,roots()虽然是const成员函数,但是企图改变两个 mutable成员变量值 //方法一:保证 const...//宗旨:特种成员函数是指那些C++会自行生成成员函数 //C++98:默认构造函数,析构函数,复制构造函数,复制赋值运算符,public访问层级且是 inline //C++11: 新增两位成员

    1.1K20

    C++第五弹 -- 类与对象中篇下(赋值运算符重载函数 const成员函数 取地址操作符重载函数)

    前言 本文将深入探讨C++运算符重载,重点讲解赋值运算符、前置/后置++运算符、取地址运算符重载方法,以及const成员函数定义和使用方法。...通过日期类实现示例,展示运算符重载和const成员函数在实际应用具体代码实现,帮助读者更好地理解和运用这些C++特性。 博客主页: 酷酷学!!! 感谢关注~ 正文开始 一....这里Date在main函数, 显然生命周期是整个程序, 所以传引用返回提高效率 赋值运算符只能重载成类成员函数不能重载成全局函数 class Date { public: Date(int year..., 此时用户再在类外实现一个全局赋值运算符重载, 就和编译器在类中生成默认赋值运算符重载冲突了, 故赋值运算符重载只能是类成员函数....成员函数const修饰成员函数”称之为const成员函数const修饰类成员函数,实际修饰该成员函数 隐含this指针,表明在该成员函数不能对类任何成员进行修改。

    5710

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

    前面我们学习过六大默认成员函数四个——构造函数与析构函数以及拷贝构造与赋值运算符重载,今天我们继续学习剩下成员函数——取地址与const取地址操作符重载。...const修饰类成员函数,实际修饰该成员函数隐含this指针,表明在该成员函数不能对类任何成员进行修改。...const成员函数声明语法为:void functionName() const; 在const成员函数,对成员变量修改会导致编译错误。...非const成员函数内可以调用其它const成员函数const成员函数内可以调用其他const成员函数。...2.取地址以及const取地址操作符重载 这两个默认成员函数一般不用重新定义,编译器默认会生成; 在C++,使用&操作符可以取得一个对象地址。

    12010

    【Python】面向对象 ③ ( 构造函数 | 成员变量赋值问题 | 构造方法引入 | 构造函数可以同时定义成员变量 )

    一、构造函数 1、成员变量赋值问题 在之前博客 , 定义 Python 类 Student : class Student: name = None # 姓名 age = None..., 才能完成成员变量赋值操作 ; 2、构造方法引入 使用构造方法 , 可以在一行代码内 , 为多个变量同时赋值 , 这样就可以减少代码量 ; 构造方法简介 : 构造方法函数名 : Python 类...Student 类包含了 __init__ 构造方法 , 和 info 成员方法 ; __init__() 构造方法 , 接收两个参数 name 和 age , 分别赋值给 name 和 age 成员变量...在上述代码示例 , 定义了 name 和 age 成员变量 , class Student: name = None # 姓名 age = None # 年龄 这两个成员变量是可以省略...; 构造函数还有一个作用 , 就是定义成员变量 , 并为其赋值 ; def __init__(self, name, age): self.name = name

    30330

    【CC++】const函数详解

    const修饰变量不能够再作为左值 初始化完成后,初始化值不能够再修改。 在C与C++const区别? const编译方式不同。...在cconst就是当作一个变量来编译生成指令 在C++,所有出现const常量名字地方,都被常量初始化替换了。 在C const修饰量可以不用初始化,但是后边也就无法赋值了。...const int a = 20; const只是保持a不能作为左值赋值,但是 可以通过指针访问里面的内存,修改a值 或者通过添加汇编指令修改。...const int a = 20; int *p = (int*)&a; *p = 30; printf("%d %d %d",a,*p,*(&a)); //打印出来值都是30 在C++ const...**q = &p; const int **q; //**q不能赋值 int * const* q; //*q不能赋值 int **const q; //q不能赋值

    10010

    C++ const常量对象、常量成员函数和常引用

    — 1 — 常量对象 如果不希望某个对象值被改变,则定义该对象时候可以在前面加 const 关键字。...--- — 2 — 常量成员函数 在类成员函数后面可以加 const 关键字,则该成员函数成为常量成员函数。...这里有两个需要注意点: 在常量成员函数不能修改成员变量值(静态成员变量除外); 也不能调用同类 非 常量成员函数(静态成员函数除外)。...常量成员函数 int GetValue() { return 2*m_value; } // 普通成员函数 int m_value; }; int main() { const...但是有个问题,对象引用作为函数参数有一定风险性,若函数不小心修改了形参 o,则实参也会跟着变,这可能不是我们想要,如何避免呢?

    1.4K20

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

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

    1.9K74

    成员初始化与赋值

    因此,在学习编程初期,教导者一般都会告诉我们要谨慎对待初始变量,而对于类来说,最保险做法是在每一个构造函数,对每一个成员数据进行恰如其分初始化。 这么简单事情,还需要注意什么吗? ?...y = yy; } 其中,x 以构造函数特有的语法(初始化列表)形式被初始化,而 y 则在构造函数中被赋值。...事实上,类成员数据在构造函数中被赋值之前,已经被系统进行过一次 default 初始化,因此赋值语句相当于抹掉了先前初始化执行效果,使得系统做了一次无用功。...而在构造函数运用初始化列表则可以避免这样效率浪费。 常量成员const)和引用成员(reference)只能使用初始化列表来赋值。...rr) // 使用初始化列表来赋初值 { } 另外要注意一点,类初始化次序是固定:首先初始化基类(如果有的话),然后按照类声明次序初始化派生类每一个成员

    1.1K20

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

    & out) 作为成员函数重载,this指针占据第一个参数,Date必须是左操作数!...那为了规避这个问题,我们就要把函数参数顺序改变,所以我们重载就不能是成员函数。...我们把重载<<作为全局函数来看呢 这时我们可以正确输出了,但是代价是我们成员变量改为公有了,不然我们在重载<<函数无法访问成员变量,这就让我们这个类变得不够安全,所以这里使用友元来解决。...: 所以需要加入const修饰: 对于一些只读函数,我们可以都加上const 让代码鲁棒性更加强大。...); // 赋值运算符重载 // d2 = d3 -> d2.operator=(&d2, d3) Date& operator=(const Date& d) const; // 日期

    12010

    【C++】构造函数初始化列表 ③ ( 构造函数 初始化列表 const 成员变量初始化 )

    传入 参数 ; 类初始化时 , 根据定义顺序 , 先调用 成员变量 构造函数 , 然后调用外部类构造函数 , 析构函数正好相反 ; 实例对象 const 成员变量 必须只能在 初始化列表 中进行...初始化 , 所有的构造函数都要进行初始化操作 ; 一、构造函数 初始化列表 const 成员变量初始化 1、初始化 const 常量成员 如果 类 定义了 被 const 修饰 成员变量..., 那么该成员变量 必须被初始化 , 否则会报错 ; 对象 const 成员 必须在 声明后 立刻进行初始化 ; const 成员初始化 只能通过 构造函数 初始化列表 进行初始化 ; 注意...: 这里区分 初始化 与 赋值 , 初始化 是 变量 声明时 同时 为其 设置一个 初始化值 ; 赋值 是 变量 声明以后 , 再对变量进行赋值 ; const 成员变量 是常量 , 是 无法在声明后...进行赋值 , 因此 这里 必须在 构造函数 初始化列表const 成员变量 进行赋值 ; 2、错误代码示例 - 没有初始化常量成员 在下面的 类 B , 定义了常量 const int

    22030

    静态成员函数和非静态成员函数区别?

    一个静态成员函数不与任何对象相联系,故不能对非静态成员进行默认访问。 它们根本区别在于静态成员函数没有this指针,而非静态成员函数有一个指向当前对象指针this。...f(Sc &s) 10 { 11 s.nsfn(10); // 转换为Sc::nsfn(&s , 10) 12 s.sfn(10); // 转换为Sc::sfn(10) 13 } 函数...对nsfn()调用,编译像注解那样进行转换,s地址作为第一个传递参数。(你并不实际写该调用,由编译来实现。)...在函数内部,Sc::nsfn()对非静态成员访问将自动把this参数作为指向当前对象指针。而当Sc::sfn()被调用时,没有任何对象地址被传递。因此,当访问非静态成员时,无this指针出错。...这就是为什么一个静态成员函数与任何当前对象都无联系原因。

    1.8K90

    【Groovy】Groovy 方法调用 ( Groovy 构造函数成员赋值 | Groovy 函数参数传递与键值对参数 | 完整代码示例 )

    文章目录 一、Groovy 构造函数成员赋值 二、Groovy 函数参数传递与键值对参数 三、完整代码示例 一、Groovy 构造函数成员赋值 ---- Groovy 类没有定义构造函数 ,...但是可以使用如下形式构造函数 , 为 Groovy 类设置初始值 ; new 类名(成员名1: 成员值1, 成员名2: 成员值2) 顺序随意 : 成员顺序随意 , 没有强制要求 , 只需要 成员名...与 成员值对应即可 ; 个数随意 : 成员个数随意 , 可以为所有的属性赋值 , 也可以只为其中部分属性赋值 ; 如下代码 : class Student { def name def...= new Student(age: 16, name: "Jerry") // 只为 name 属性赋值 def student3 = new Student(name: "Jim") // 打印两个对象值...---- 在 Groovy 构造函数 , 可以使用 成员名1: 成员值1, 成员名2: 成员值2 类型参数 , 这是键值对 map 类型集合 ; 但是对于普通函数 , 不能使用上述格式 ,

    9.2K20
    领券