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

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

const成员变量 const 成员变量的用法和普通 const 变量的用法相似,只需要在声明时加上 const 关键字。...const成员函数(常成员函数) const 成员函数可以使用类中的所有成员变量,但是不能修改它们的值,这种措施主要还是为了保护数据而设置的。const 成员函数也称为常成员函数。...我们通常将 get 函数设置为常成员函数。读取成员变量的函数的名字通常以get开头,后跟成员变量的名字,所以通常将它们称为 get 函数。...() const{ return m_score; } getname()、getage()、getscore() 三个函数的功能都很简单,仅仅是为了获取成员变量的值,没有任何修改成员变量的企图...函数头部的结尾加上 const 表示常成员函数,这种函数只能读取成员变量的值,而不能修改成员变量的值,例如char * getname() const。

30930

const修饰符的使用(修饰结构体指针,引用外部的const 变量)

const修饰符的使用 //const修饰变量为只读 const int a = 10; a = 20;//是错误的赋值 //指针变量 指针指向的内存 两个不同的概念 char buf[] =..."helloworld"; //从左往右看,跳过类型,看修饰那个字符 //如果是*,说明指针指向的内存不能改变 //如果是指针变量,说明指针的指向不能改变,指针的值不能修改 const char *p...是对指针指向的内存空间的内容进行封锁。 const封锁的是指针变量,不能修改其指向,但是可以修改指针指向内存当中的内容。...const修饰结构体指针 //对结构体进行封锁 typedef struct { int a; int b; }my_struct; void fun1(my_struct *p)...p) { //结构体指针的指向不可以修改 //结构体指针指向内存当中的内容也不可以修改 } 如何引用其他.c文件中的const变量 extern const int a;//注意,不能再进行赋值

55010
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    临时变量作为非const的引用进行参数传递引发的编译错误

    其中文意思为临时变量无法为非const的引用初始化。也就是在参数传递的过程中,出现错误。...当这个临时对象传递给非const的string&引用类型时,因为非const引用绑定对象时,要求该对象也是非const对象。而在这时,因为string类型的临时对象是const对象,所以就出现错误。...---- 2.所有的临时对象都是const对象吗 为什么临时对象作为引用参数传递时,必须是常量引用呢?很多人对此的解释是临时对象是常量,不允许赋值改动,所以作为非常量引用传递时,编译器就会报错。...IntClass(6)表示生成一个无名的临时对象,传递给非const引用,在print函数中通过引用修改了这个临时对象。这说明了并非所有的临时对象都是const对象。...这里贴上摘自网上的一句话:“内置类型产生的临时变量具有常性,而自定义类型产生的临时变量不具有常性”,我想这句话能解释你所谓的临时变量为什么能作为左值的原因。”

    2.6K31

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

    初始化 , 所有的构造函数都要进行初始化操作 ; 一、构造函数 的 初始化列表 中 为 const 成员变量初始化 1、初始化 const 常量成员 如果 类 中定义了 被 const 修饰 的 成员变量...: 这里区分 初始化 与 赋值 , 初始化 是 变量 声明时 同时 为其 设置一个 初始化值 ; 赋值 是 变量 声明以后 , 再对变量进行赋值 ; const 成员变量 是常量 , 是 无法在声明后...进行赋值 的 , 因此 这里 必须在 构造函数的 初始化列表中 对 const 成员变量 进行赋值 ; 2、错误代码示例 - 没有初始化常量成员 在下面的 类 B 中 , 定义了常量 const int...m_const_int; 没有对该常量 进行初始化 操作 , 在编译运行时 , 就会报错 ; class B { public: B() : m_age(10), m_a(10, 150) {}...没有对 常量成员 进行初始化 , 就会报错 ; 代码示例 : class B { public: B() : m_age(10), m_a(10, 150), m_const_int(888) {}

    24230

    const详解

    基本概念 const名叫常量限定符,用来限定特定变量,以通知编译器该变量是不可修改的。习惯性的使用const,可以避免在函数中对某些不应修改的变量造成可能的改动。...const成员函数可以访问所有成员变量,但是只能访问const的成员函数。 非const成员函数,可以访问任何成员,包括const成员成员函数。...const成员函数不能修改任何的成员变量,除非变量用mutable修饰。 使用const的好处 可定义常量 防止意外修改造成的错误 便于进行类型检查 const常量有数据类型,而宏常量没有数据类型。...编译器可以对前者进行类型安全检查,而对后者只进行字符替换,没有类型安全检查,并且在字符替换时可能会产生意料不到的错误。 为函数重载提供了一个参考 const修饰的函数可以看作是对同名函数的重载。...所以我们在平时使用参数的时候,对于没有修改需求的变量或者参数 应该用const保护。

    43130

    C++的魔法世界:类和对象的终章

    必须使用初始化列表的类: ​ 没有默认构造的类类型成员变量、被const修饰的成员变量(声明时必须初始化)、被引用的成员变量(声明引用时必须初始化) 自定义类型成员变量,没有默认构造想要调用它的构造需要传参...将d1对象使用const修饰后就不会出现这种问题 但这又引出了新的问题,临时对象在调用完拷贝构造函数,出了作用域它就会被销毁了,而常性d1对象对临时对象使用了引用,这导致d1对象对一块被销毁引用,是野引用...指针 非静态的成员函数,可以访问任意位置的成员变量和成员函数 静态成员函数,只能访问静态成员变量和静态成员函数,它没有this指针 class pp { public: pp(int z =...静态成员也受 private、public、protected访问限定符的限制 突破类域就可以访问静态成员变量,可以通过 类名::静态成员 或者 对象.静态成员来访问静态成员变量、函数。...const A& r = A(); 但它被引用后而匿名对象的空间被销毁,导致野引用,这在语法上是不允许的 反之,没有使用const进行修饰,在编译时会引起编译器的报错 匿名对象作函数缺省值: class

    5000

    Java内部类详解

    同样的,匿名内部类也是不能有访问修饰符和static修饰符的。   匿名内部类是唯一一种没有构造器的类。正因为其没有构造器,所以匿名内部类的使用范围非常有限,大部分匿名内部类用于接口回调。...静态内部类是不需要依赖于外部类的,这点和类的静态成员属性有点类似,并且它不能使用外部类的非static成员变量或者方法,这点很好理解,因为在没有外部类的对象的情况下,可以创建静态内部类的对象,如果允许访问外部类的非...从这里也间接说明了成员内部类是依赖于外部类的,如果没有创建外部类的对象,则无法对Outter this&0引用进行初始化赋值,也就无法创建成员内部类的对象了。   ...我们看到匿名内部类Test$1的构造器含有两个参数,一个是指向外部类对象的引用,一个是int型变量,很显然,这里是将变量test方法中的形参a以参数的形式传进来对匿名内部类中的拷贝(变量a的拷贝)进行赋值初始化...为了解决这个问题,java编译器就限定必须将变量a限制为final变量,不允许对变量a进行更改(对于引用类型的变量,是不允许指向新的对象),这样数据不一致性的问题就得以解决了。

    44810

    C++面试知识总结

    1.2 内存溢出原因 栈溢出:越界访问造成,例如局部变量数组越界访问或者函数内局部变量使用过多,超出了操作系统为该进程分配的栈的大小,还有递归函数层次过多超过了栈大小。...2.14 野指针,未初始化指针和空指针的区别 野指针:指向一个已删除的对象或无意义地址的指针。 原因:指针变量没有被初始化,或者指针p被free或者delete之后,没有置为NULL。  ...2.18 static全局变量与普通的全局变量的区别 全局变量在整个工程文件内都有效。 静态全局变量只在定义它的文件内有效。 全局变量和静态变量如果没有手工初始化,则由编译器初始化为0。...static成员函数在类的外部定义。 Static成员函数没有this形参。 可以直接访问所属类的static成员,不能直接使用非static成员。...在类中的static成员变量属于整个类所拥有,对类的所有对象只有一份拷贝。 在类中的static成员函数属于整个类所拥有,这个函数不接收this指针,因而只能访问类的static成员变量。

    1.8K41

    C++关键知识点梳理

    bufSize,需在使用的cc文件中声明external const int budSize;const &:C++中const的引用经常用于函数的参数或者函数的返回值,用于不被修改的对象使用安全性,例如...宏类似于函数,但是其()中的参数不是真的函数参数,在编译器进行宏展开时对()里的参数进行"一对一"的替换。...默认构造函数没有参数,在没有定义任何构造函数的情况下,编译器会帮我们自动定义默认构造函数,否则我们定义了其他构造函数后,一定要显示定义默认构造函数;析构函数拷贝构造函数赋值构造函数访问控制和封装:this...)手动分配和释放;栈(stack):编译器自动分配释放;全局区/静态区:全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域...oop封装C++中封装通过对类的访问权限实现,类将客观事物抽象成数据成员和方法,并通过public,protected,private三种访问权限控制其他对象对类的访问和继承。

    98430

    C++打怪升级(六)- 类和对象入门3

    前文我们并没有对构造函数进行进一步的探讨,即类对象创建时类成员变量具体是在构造函数哪里初始化的?...成员变量错误举例: const成员变量正确举例: 引用成员变量错误举例: 引用成员变量正确举例: 类中有自定义类型成员,且该类没有默认构造函数 因为在创建类对象时先调用构造函数...: 1.初始化列表进行的 定义初始化 2.构造函数体内的对初始化列表已定义变量的初始化,或者说赋值更好 每个类成员变量默认(隐式的)都会经过初始化列表, 我们也可以显式的在初始化列表中写,...,然后类类型引用变量a3再引用这个临时变量; 并且由于临时对象具有常性const,多以类类型引用变量需要用const修饰; ---- 编译器对创建类对象时隐式类型转换的可能的优化 编译器是对连续步骤中的优化..._b << endl; return 0; } ---- 对静态成员函数的调用 静态成员也是类的成员,受public、protected、private 访问限定符的限制 静态成员函数没有隐藏的

    63020

    C++ 类和对象

    类体中内容被称为类的成员:类中的变量为类的属性或者成员变量;类内的函数时类的方法和成员函数。...,类的所有成员都在该作用域中,在类外定义成员时,需要使用" :: "进行访问(指明类域) 类域影响的是编译的查找规则,如果没有指定类域,编译器会在全局域中寻找,如果编译的时候找不到声明或者定义...在编译器编译后,都会在类成员函数形参第一个位置提案加一个当前类类型的指针,叫做thsi 显示出来就是:"void A(Typecalss* const this,....);" 类的成员函数中华访问成员变量...const成员变量没有默认构造的类类型变量,就必须在初始化列表进行初始化,不然会报错 C++11允许给成员变量在声明的地方给出一个缺省值,如果没有初始化列表就按照缺省值初始化...,不属于某个具体的对象,不存在对象中,存放在静态区 用static修的的成员函数,是静态成员换上,没有this指针 非静态的成员函数,可以访问任意的静态成员变量和静态成员函数

    8410

    CC++常见面试知识点总结附面试真题—-20220326更新

    或者左值就是在程序中能够寻址的东西,右值就是一个具体的真实的值或者对象,没法取到它的地址的东西(不完全准确),因此没法对右值进行赋值,但是右值并非是不可修改的,比如自己定义的class, 可以通过它的成员函数来修改右值...3. const 有什么用途 主要有三点: 1).定义只读变量,或者常量(只读变量和常量的区别参考下面一条); 2).修饰函数的参数和函数的返回值; 3).修饰函数的定义体,这里的函数为类的成员函数,被...const修饰的成员函数代表不能修改成员变量的值,因此const成员函数只能调用const成员函数, 可以访问非const成员,但是不能修改; 4).只读对象。...静态成员变量在类外单独分配存储空间,位于全局数据区,因此静态成员变量的生命周期不依赖于类的某个对象,而是所有类的对象共享静态成员变量; 3). 可以通过对象名直接访问公有静态成员变量; 4)....静态成员函数可以访问静态成员变量,但是不能直接访问普通成员变量(需要通过对象来访问);需要注意的是普通成员函数既可以访问普通成员变量,也可以访问静态成员变量; 3).

    1.6K10

    【C++ 初阶路】--- 类和对象(末)

    (初始化只能初始化一次) 类中包含以下成员,必须放在初始化列表位置进行初始化: 引用成员变量 const成员变量 自定义类型成员(且该类没有默认构造函数时) class A { public:...int& _ref; // 引用 const int _n; // const }; 有一些变量(引用,const)必须要在定义时初始化,对于一个类来说,在对象实列化时就整体定义了,那么哪里是每个成员定义的地方呢...此处用2构造了一个类C的临时对象,然后再拷贝构造cc2。即:用一个整形变量给C类型对象赋值,实际编译器背后会用2构造一个无名对象,最后用无名对象给cc2对象进行拷贝构造。...,不属于某个具体的对象,存放在静态区; 静态成员变量必须在类外定义,定义时不添加static关键字,类中只是声明; 类静态成员即可用 类名::静态成员 或者 对象.静态成员 来访问; 静态成员函数没有隐藏的..._day; return _cout; } 说明: 友元函数可访问类的私有和保护成员,但不是类的成员函数; 友元函数不能用const修饰(因为const修饰的是隐藏的this,而友元函数没有隐藏的

    8010

    C++ const各种用法总结

    const 对象默认为文件的局部变量。要使const变量能够在其他的文件中访问,必须显式地指定它为extern。...例如: const int i = 128; const int &r = i;(或者 int const &r = i;) const 引用就是指向const 对象的引用。...返回引用:const int &func2(); // 注意千万不要返回局部对象的引用,否则会报运行时错误:因为一旦函数结束,局部对象被释放,函数返回值指向了一个对程序来说不再有效的内存空间。..., [1]必须在构造函数里面进行初始化; [2]只能通过初始化成员列表来初始化; [3]试图在构造函数体内对const成员变量进行初始化会引起编译错误。...编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。

    2K10

    类和对象:运算符重载

    当你尝试将赋值运算符重载为全局函数时,会出现问题,原因如下: 成员访问权限:作为全局函数,赋值运算符将无法访问类的非公共(private或protected)成员变量。...在成员函数内部,this 指针允许你访问对象的成员变量和其它成员函数。全局函数没有 this 指针,因此无法访问特定对象的状态。 自赋值保护:成员函数版本的赋值运算符可以检查自赋值,即对象赋值给自己。...这个默认的赋值运算符会进行成员到成员的简单赋值,也就是逐个复制每个非引用、非指针成员变量的值。...如果类中包含了其他自定义类型作为其成员变量,并且这些自定义类型重载了赋值运算符 =,那么在进行类实例的赋值操作时,编译器会尝试调用这些成员变量类型的赋值运算符来完成赋值(MyQueue)。...: ①要修改对象成员变量的函数不能加; ②只要成员函数内部不修改成员变量,就都应该加const,这样const对象和普通对象都可以调用。

    12310

    今天你学C++了吗——C++中的类与对象(第四集)

    ~ 》 引用成员变量,const成员变量,没有默认构造的类类型变量,必须放在初始化列表位置进行初始化 ,否则会编译报错~ 》 我们知道const修饰的对象以及引用必须在定义的时候就初始化~而...) 》 如果你没有给缺省值,对于没有显示在初始化列表初始化的内置类型成员是否初始化取决于编译器,C++并没有规定。...》分类: 友元提供了一种突破类访问限定符封装的方式,友元分为:友元函数和友元类 友元类适用于需要频繁访问一个类里面的成员变量或者成员函数~经常写就比较麻烦~ 》形式: 在函数声明或者类声明的前面加...1.指定类域 2.使用对象 详解:突破类域访问公有静态成员,可以通过 类名::静态成员 或者 对象.静态成员 来 访问公有静态成员变量和静态成员函数~ 例: #...》 静态成员函数中可以访问其他的静态成员 , 因为没有this指针,所以它不能访问非静态的 》 非静态的成员函数可以访问任意的静态成员变量和静态成员函数 》 静态成员也是类的成员 ,

    5610

    类和对象的简述(c++篇)

    为了区分类中的成员变量和函数传参的量,通常在成员变量前或后加上_。 对类里面的函数一般默认是inline修饰的内联函数。 2.访问限定符: 可以分为 public,private,protected。...int main() { MyQueue mq; MyQueue mmq(mq); return 0; } 对Myqueue的分析: 这个类里面都是编译器默认生成的默认成员函数;故每次都是先对它的成员变量的操作...③对于声明的时候给的值是缺省值,也就是如果初始化列表没有这个成员变量,然后他会用缺省值。...④对有const类变量必须在初始化列表定义或者用缺省值,因为它无默认构造;对于引用也是必须有初始化即在初始化列表中定义。 ⑤编译器是按照声明顺序去给变量定义的,故尽量把声明和定义顺序写一致。...④静态成员也是类的成员也受访问限定符的限定即如果放在private也是外部无法访问。 ⑤静态成员的访问可以用类名+::或者对象+.来获取。

    6700

    const的那些事

    给src加上const修饰后,如果函数体内的语句试图改动src的内容,编译器将指出错误。这就是加了const的作用之一。 (3)参数为引用,为了增加效率同时防止修改。...如果在编写const成员函数时,不慎修改 数据成员,或者调用了其它非const成员函数,编译器将指出错误,这无疑会提高程序的健壮性。使用const关 字进行说明的成员函数,称为常成员函数。...只有常成员函数才有资格操作常量或常对象,没有使用const关键字 明的成员函数不能用来操作常对象。...const对象可以访问任意的成员函数,包括const成员函数....也就是说const对象只能访问const成员函数。 而add方法又调用了const修饰的take方法,证明了非const对象可以访问任意的成员函数,包括const成员函数。

    64230

    C++笔试面试题整理

    失败的转换将返回空指针(当对指针进行类型转换时)或者抛出异常(当对引用进行类型转换时)。...const修饰类的成员函数(函数定义体):任何不需要修改数据成员的函数都应该使用const修饰,这样即使不小心修改了数据成员或调用了非const成员函数,编译器也会报错。...4.引用没有 const,指针有 const; 5.引用不能为空,指针可以为空; 6....谈谈你对指针的理解? 指针是一个变量,该变量专门存放内存地址; 指针变量的类型取决于其指向的数据类型,在所指数据类型前加* 指针变量的特点是它可以访问所指向的内存。...当一个类A中没有生命任何成员变量与成员函数,这时sizeof(A)的值是多少,请解释一下编译器为什么没有让它为零。 为1。

    2.6K40

    类和对象(完结)

    如果你没有给缺省值,对于没有显⽰在初始化列表初始化的内置类型成员是否初始化取决于编译器,C++并没有规定。...等价于int d=13;int &h=d;int &b=h; 3const成员变量 const也如上图,但是与引用不同我们可以之间在初始化链表定义。...没有默认构造的类,引⽤和const之所以只能在初始化链表定义的原因是他们必须有初始的值,如果没有初始值,编译器会报错 3对于在类中成员变量初始化的总结 (1)我们要先看是否有初始化链表,如果有的话就按初始化链表初始化...• 引⽤成员变量,const成员变量,没有默认构造的类类型变量,必须放在初始化列表位置进⾏初始 化,否则会编译报错。...• ⾮静态的成员函数,可以访问任意的静态成员变量和静态成员函数。 • 突破类域就可以访问静态成员,可以通过类名::静态成员 或者 对象.静态成员 来访问静态成员变量 和静态成员函数。

    9910
    领券