首页
学习
活动
专区
圈层
工具
发布

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

在类中,如果你不希望某些数据被修改,可以使用const关键字加以限定。const 可以用来修饰成员变量和成员函数。...const成员变量 const 成员变量的用法和普通 const 变量的用法相似,只需要在声明时加上 const 关键字。...初始化 const 成员变量只有一种方法,就是通过构造函数的初始化列表,这点在前面已经讲到了,请猛击《C++初始化列表》回顾。...const成员函数(常成员函数) const 成员函数可以使用类中的所有成员变量,但是不能修改它们的值,这种措施主要还是为了保护数据而设置的。const 成员函数也称为常成员函数。...我们通常将 get 函数设置为常成员函数。读取成员变量的函数的名字通常以get开头,后跟成员变量的名字,所以通常将它们称为 get 函数。

2.1K30

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

构造函数初始化列表 总结 : 初始化列表 可以 为 类的 成员变量 提供初始值 ; 初始化列表 可以 调用 类的 成员变量 类型的 构造函数 进行成员变量初始化操作 ; 初始化列表 可以 使用 构造函数...中传入的 参数 ; 类初始化时 , 根据定义顺序 , 先调用 成员变量的 构造函数 , 然后调用外部类构造函数 , 析构函数正好相反 ; 实例对象 的 const 成员变量 必须只能在 初始化列表 中进行...初始化 , 所有的构造函数都要进行初始化操作 ; 一、构造函数 的 初始化列表 中 为 const 成员变量初始化 1、初始化 const 常量成员 如果 类 中定义了 被 const 修饰 的 成员变量..., 对 常量成员 进行初始化操作 ; 3、正确代码示例 - 在初始化列表中初始化常量成员 在下面的 类 B 中 , 所有的 构造函数 中 , 都要使用 初始化列表 初始化 常量成员 , 只要遗漏一个构造函数...; // 常量成员 }; int main() { // 通过 B 的有参构造函数 // 其中 构造函数中的参数 作为 参数列表 中的参数值 B b(10, 10, 150); // 控制台暂停

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

    【C++初阶】:C++入门篇(一)

    无论是C语言还是C++,在同一个局部域里面是不允许出现相同的变量名的,在同一个作用域下定义了两个相同变量名的变量会导致访问冲突,编译器不知道该使用哪个变量,从而导致报错。...不仅仅是变量名,函数名相同也是一样的(C++函数重载除外)。这也导致在一群人写同一个项目时,写完在合并之后可能导致函数名或变量名冲突的问题,为解决这个问题,C++的命名空间孕育而生。...1.1 命名空间的定义 定义命名空间时,需要用到namespace这个关键字,后面紧跟命名空间的名字,再接一队 {},{} 中为命名空间的成员。...了解完命名空间后,我们也算知道了为什么每次写C++程序时总要写一句using namespace std; std::是个名称空间标识符,C++标准库中的函数或者对象都是在命名空间std中定义的,所以我们要使用标准库中的函数或者对象都要用...其实只要我们仔细想一下就应该知道缺省值应该在函数的声明时给,因为函数往往都是先声明后使用,如果我们在声明函数时没有缺省值,但定义时又给了缺省值,就容易导致声明与定义不一致,另外,修改函数的声明比修改函数的定义要方便

    35810

    【计算机本科补全计划】Java学习笔记(二) 基础语法红黄蓝

    源文件名:源文件名必须和类名相同。当保存文件的时候,你应该使用类名作为文件名保存(切记Java是大小写敏感的),文件名的后缀为.java。(如果文件名和类名不相同则会导致编译错误)。...方法、变量、构造函数也可以在枚举中定义。 ? 类似于C/C++,Java也支持单行以及多行注释。注释中的字符将被Java编译器忽略。...变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。 成员变量:成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。...一个类可以拥有多个方法,在上面的例子中:barking()、hungry()和sleeping()都是Dog类的方法。 ---- 12、 构造方法(C++构造函数之 改头换面!)...你跟c++有啥区别!!new么?我感觉C++的好简洁) 声明:声明一个对象,包括对象名称和对象类型。 实例化:使用关键字new来创建一个对象。

    1.1K60

    Effective C++笔记

    const可被施加于任何作用域内的对象、函数参数、函数返回类型、成员函数本体 编译器强制实施bitwise constness,但你编写程序时应该使用“概念上的常量性” 当const和non-const...成员函数有着实质等价的实现时,令non-const版本调用const版本可避免代码重复 4.确定对象被使用前已被初始化 为内置型对象进行手工初始化,因为C++不保证初始化它们 构造函数最好使用成员初始值列...初值列列出的成员变量,其排列次序应该和它们在class中的声明次序相同 为免除“跨编译单元之初始化次序”问题,请以local static对象替换non-local static对象 5....成对使用new和delete时,要采取相同形式 如果你在new表达式中使用[],必须在相应的delete表达式中也使用[]。如果在new表达式中不使用,在delete中也不要使用 17....,往往可消除,做法是以函数参数或class成员变量替换template参数 因类型参数而造成的代码膨胀,往往可降低,做法是让带有完全相同二进制表述的具现类型共享实现码 45.

    1.1K20

    C++必知必会之基础知识-常用关键(3)

    在需要移植性和可靠性的场景中,建议使用常规的数据成员而不是位域 extern “C” 在C++中,extern "C"是一个用于声明C语言风格的函数和变量的关键字。...使用extern "C"可以告诉C++编译器将某些函数和变量按照C语言的规则进行处理,以实现C和C++之间的混合编程。...使用extern "C"有以下几个常见的场景: C++调用C语言库:当C++代码需要调用一个由C语言编写的库时,由于C和C++之间的名称修饰不同,需要使用extern "C"来正确链接C语言的函数。...需要注意的是,extern "C"应该只用于C和C++之间的函数和全局变量的声明,而不应该用于类的定义和成员函数。因为类的成员函数涉及到C++的特性,无法通过简单的名称修饰解决链接问题。...使用哪个关键字取决于编程风格和设计选择。 union 在C++中,union是一种特殊的数据结构,允许在相同的内存位置存储不同的数据类型。

    40830

    Effective C++: 改善程序与设计的55个具体做法

    条款01:视C++为一个语言联邦 请记住 ■ C++高效编程守则视状况而变化,取决于你使用C++的哪一部分。...初值列列出的成员变量,其排列次序应该和它们在class中的声明次序相同。 ■ 为免除“跨编译单元之初始化次序”问题,请以local static对象替换non-localstatic对象。...条款13:以对象管理资源 请记住 ■ 为防止资源泄漏,请使用RAII对象,它们在构造函数中获得资源并在析构函数中释放资源。...条款16:成对使用new和delete时要采取相同形式 请记住 ■ 如果你在new表达式中使用[],必须在相应的delete表达式中也使用[]。...■ 因非类型模板参数(non-type template parameters)而造成的代码膨胀,往往可消除,做法是以函数参数或class成员变量替换template参数。

    1K20

    C++知识总结

    引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,不能再把该引用名作为其他变量名的别名。...(2)使用引用传递函数的参数,在内存中并没有产生实参的副本,它是直接对实参操作;而使用一般变量传递函数的参数,当发生函数调用时,需要给形参分配存储单元,形参变量是实参变量的副本;如果传递的是对象,还将调用拷贝构造函数...因此上面的表达式就是试图将一个const类型的对象转换为非const类型,这是非法的。 引用型参数应该在能被定义为const的情况下,尽量定义为const 。 8....在派生类中重新定义此函数,要求函数名、函数类型、函数参数个数和类型全部与基类的虚函数相同,并根据派生类的需要重新定义函数体。...C++规定,当一个成员函数被声明为虚函数后,其派生类中的同名函数都自动成为虚函数。

    1.3K40

    关于JAVA你必须知道的那些事(一):概述

    3、开发环境 Java可以下windows和linux等系统下进行开发,这里仅介绍在windows下开发需要设置的环境参数,在安相应版本JDK之后,进行变量设置。...源文件名:源文件名必须和类名相同。当保存文件的时候,你应该使用类名作为文件名保存(切记Java是大小写敏感的),文件名的后缀为.java。(如果文件名和类名不相同则会导致编译错误)。...另外:java中没有头文件,它是以import的方法从外面导入.class文件的; java中的main函数是包含在一个类中的,与C++是不一样的,在C++中没有定义类也是一个程序。...(即包中包含很多种类的类和接口) 当编译一个.java文件(即一个编译单元)时,在.java文件中的每个类都会有一个输出文件,而该输出文件的名称与.java文件中每个类的名称相同,只是多了一个后缀名.class...(数组a,a.length为数组长度),Array类具有一些函数可以对数组进运算。 6、Java高级特性和接口 Java中类继承只允许一个父类,当需要进行多个继承时,需要使用接口。

    91420

    CC++中static变量和static函数的用法

    比如类的声明放在list.h中而实现 房子List.cpp中,这也就是平常见到的C++程序的文件模式。 同样静态成员数据也有public和private之分。...声明方法为:static 数据类型 成员变量名 初始化方法为: static 类名::成员变量名 = 值 静态成员函数: 相同与静态成员数据,静态成员函数也是属于某个类而非某个对象 声明方法为: static...返回值类型 函数名(参数列表) 具体实现方法为: 类名::函数名(参数列表) 注意:没有staic 和 返回值类型了 ————————————————————– Class Node{ public...语言中使用,第三种只在C++中使用(C,C++中具体细微操作不尽相同, 本文以C++为准). (1)局部静态变量 (2)外部静态变量/函数 (3)静态数据成员/成员函数 下面就这三种使用方式及注意事项分别说明...无法使用file1.cpp文件中static函数 三、静态数据成员/成员函数(C++特有) C++重用了这个关键字,并赋予它与前面不同的第三种含义:表示属于一个类而不是属于此类的任何特定对象的变量和函数

    3.1K30

    c++面试选择题_C语言经典笔试题

    C++的多态性具体体现在运行和编译两个方面: 在程序运行时的多态性通过继承和虚函数来体现; 在程序编译时多态性体现在函数和运算符的重载上; 虚函数:在基类中冠以关键字 virtual 的成员函数。...这时,被调函数的形参就成为原来主调函数中的实参变量或对象的一个别名来使用,所以在被调函数中对形参变量的操作就是对其相应的目标对象(在主调函数中)的操作。...(2)使用引用传递函数的参数,在内存中并没有产生实参的副本,它是直接对实参操作;而使用一般变量传递函数的参数,当发生函数调用时,需要给形参分配存储单元,形参变量是实参变量的副本;如果传递的是对象,还将调用拷贝构造函数...(3)使用指针作为函数的参数虽然也能达到与使用引用的效果,但是,在被调函数中同样要给形参分配存储单元,且需要重复使用”*指针变量名”的形式进行运算,这很容易产生错误且程序的阅读性较差;另一方面,在主调函数的调用点处...因此上面的表达式就是试图将一个const类型的对象转换为非const类型,这是非法的。引用型参数应该在能被定义为const的情况下,尽量定义为const 。

    1.6K10

    【C++】C++ 类中的 this 指针用法 ① ( C++ 类中的 this 指针引入 | this 指针用法 | 代码示例 )

    this 指针用法 C++ 类中的 this 指针用法 : 使用 this 作为指针 : 在 非静态成员函数 中 , 直接使用 this 作为 本实例对象 的指针 ; this 使用 this-> 访问成员变量...访问成员变量 : 在 非静态成员函数 中 , 直接使用如下语法 , 访问 本实例对象 中的 非静态成员变量 ; 先获取指针指向的数据 然后访问数据中的成员变量 ; (*this).成员变量名 在 C++...成员变量 ; 在下面的代码中 , 参数名称也是 age 和 height , 与 成员变量名称重名了 , 使用 this 指针可以有效区分 函数参数 与 成员变量 重名的问题 ; 使用 代码 this..., 构造函数 Student(int age, int height) 的 参数名为 age 和 height , 成员变量为 int age 和 int height , public: int age...; // 年龄 int height; // 身高 正好 , 成员变量名称 与 参数名相同 , 这里使用 this 关键字 , 可以解决名称冲突的问题 ; 代码示例 : #include "iostream

    1.8K20

    c++面试题

    C++的多态性具体体现在运行和编译两个方面:在程序运行时的多态性通过继承和虚函数来体现; 在程序编译时多态性体现在函数和运算符的重载上 虚函数:在基类中冠以关键字 virtual 的成员函数。...引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,不能再把该引用名作为其他变量名的别名。...(2)使用引用传递函数的参数,在内存中并没有产生实参的副本,它是直接对实参操作;而使用一般变量传递函数的参数,当发生函数调用时,需要给形参分配存储单元,形参变量是实参变量的副本;如果传递的是对象,还将调用拷贝构造函数...(3)使用指针作为函数的参数虽然也能达到与使用引用的效果,但是,在被调函数中同样要给形参分配存储单元,且需要重复使用"*指针变量名"的形式进行运算,这很容易产生错误且程序的阅读性较差;另一方面,在主调函数的调用点处...因此上面的表达式就是试图将一个const类型的对象转换为非const类型,这是非法的。引用型参数应该在能被定义为const的情况下,尽量定义为const 。

    1.5K21

    《C++初阶之入门基础》【命名空间 + 输入&输出 + 缺省参数 + 函数重载】

    小案例:我写的变量和库函数的函数名引发命名冲突 #include #include /*------------任务:定义变量 + 在终端上打印该变量存储的值...C++的作用域的访问顺序是什么? 命名冲突的本质是什么? 命名冲突(Name Conflict):在同一作用域内使用相同的标识符(如:变量名、函数名、类名等),导致编译器无法区分它们的情况。...在 C++ 中,当访问一个标识符时,编译器会按照特定的顺序查找该标识符的定义,这个过程称为 名称查找(Name Lookup) 理解这个顺序对于避免命名冲突和理解代码行为至关重要。...名称查找顺序: 局部作用域(Block Scope):首先在当前函数的局部作用域中查找标识符,包括在当前块(如:if 语句、for 循环等)中定义的变量。...(int& a); 成员函数的 const 重载 类的成员函数是否为 const 可以构成重载,用于区分对常量对象和非常量对象的调用 int getValue() const; int getValue

    21510

    【笔记】《Effective C++》条款1-25

    上周看完了这本大名鼎鼎的《Effective C++》,属实学到了很多技巧,本文是我阅读途中做的记录。...这些行为结果并非报错, 而是与编译器和执行环境相关的无法估计的结果 "接口"通常指函数的签名 1 让自己习惯C++ 1 视C++为一个语言联邦 将C++看作是以多个相关语言组成的结合体而不是一个关系紧密的单一语言...使用初值列初始化的时候还要注意成员依赖的问题, 时刻记得: 成员在初值列中初始化的顺序至于其在类内的声明顺序相同, 为了防止混乱我们应该也按照声明顺序在初值列进行排列 以上可能导致初值列本身产生重复,...那么对于那些赋值和直接初始化效果一样好(例如那些需要借助数据库进行真正的初始化的成员)则应该移进一个统一的特殊函数中(Setup函数), 然后在构造函数中调用这个函数 对于static成员又要注意, C..., 因为大多数运算符都需要符合交换律, 而此时如果是成员函数, 调用函数的对象本身并不处于参数列中, 这会导致调用错误), 应该使用非成员函数然后写入所有所需的参数 member的反面是non-member

    1.6K30

    【笔记】《Effective C++》条款26-55

    (name-hiding), 至于这两个名称类型是否相同并不被考虑 这是非常危险的特性, 如下图派生类中的mf3函数会将基类的两个mf3一起进行遮掩, 无论基类那两个函数类型和形式是什么样的 因此对于公有继承来说..., 令用户只修改核心部分, 但利用总的接口来使用 NVI手法需要允许用户修改私有的虚函数, 这恰好是C++中"派生类可以重新定义继承来的私有虚函数, 因为继承而来的虚函数与基类无关"这个特性的应用 当派生类需要使用基类的一些内容时虚函数也会被写为..., 只和重载一样和名称与参数有关, 所以很容易二义 更复杂的情况是下图的"菱形继承": 菱形继承中, 对于不同基类都拥有的同名成员, C++默认会复制多份以供使用, 如果不希望复制就应该使用虚继承,...的双重意义 typename一般出现在模板参数中作为参数前缀, 在这种情况下typename和class是等价的(但是typename较晚推出, 建议使用语义更清晰的typename) 当一个模板中某个名称依赖于模板参数时...核心手法和简化普通函数相同, 就是将模板操作中不变的部分抽离出来, 独立成尽可能与模板无关代码, 通过指针之类的方法进行连接使用 但是简化的时候也要注意有些时候抽离得越复杂, 副作用就越多, 所以要形成效率与安全性之间的取舍

    1.3K30

    C++编译与链接(0)-.h与.cpp中的定义与声明

    show@@YAXXZ) 已经在 a.obj 中定义  所以要避免在头文件中定义函数 2、在不同.cpp中定义的函数原型(函数返回值,函数名称,函数参数)不能完全一样, 比如如果有在两个.cpp文件中均存在...(*C++11中,标准允许使用等号=或者花括号{}进行就地的非静态成员变量初始化) 在类内部定义的成员函数将自动作为inline处理 在.h外部定义的函数需要加上inline说明 否则在被include...show@A@@QAEXXZ) 已经在 a.obj 中定义    类的const成员 在类中声明变量为const类型的成员不可以就地初始化 const常量的初始化必须在构造函数初始化列表中初始化,而不可以在构造函数函数体内初始化...- 不可以 (*C++11中,标准允许使用等号=或者花括号{}进行就地的非静态成员变量初始化) 类成员函数 ------------------ ---------------- 在.h外部定义的函数需要加上...需要到头文件以外去定义它) 类的静态的常量整形数据成员 ------------------ 可以 特殊说明 模板 模板函数与模板类的声明与实现必须放在一个文件中 至于为什么会这样,与C++的编译和链接

    4.2K70

    【C++】类和对象(类的定义,类域,实例化,this指针)

    类的定义 c++中,类可以用class关键词实现,也可以用结构体struct实现 > 以下是class关键词的使用 如下代码, class为定义类的关键字,Stack为你取的类的名字,{ }内为类的主体...类域 .c++一共有四大域:函数局部域、全局域、命名空间域和类域。 而我们之前在类中定义的成员函数和成员变量,就属于类域。...实例化 这是我之前写的博客内容 1. 1对N 一个类可以实例化多个对象 2. 计算大小只考虑成员变量 不包含成员函数 计算方式遵循内存对齐原则 内存对齐原则 3....到此一游 当类中只有成员函数或者类为空类时,其所创建的对象大小为1字节,纯属占位作用。...该函数调用当中的this指针指向的是对象m,自动访问其地址 注意: 形参和实参传参列表(this指针会自动在参数第一个位置生成)不可直接使用this,仅可在类的成员函数中使用。

    1.1K10

    C++经典面试题(最全,面中率最高)

    C++的多态性具体体现在运行和编译两个方面:在程序运行时的多态性通过继承和虚函数来体现; 在程序编译时多态性体现在函数和运算符的重载上; 虚函数:在基类中冠以关键字 virtual 的成员函数。...引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,不能再把该引用名作为其他变量名的别名。...(2)使用引用传递函数的参数,在内存中并没有产生实参的副本,它是直接对实参操作;而使用一般变量传递函数的参数,当发生函数调用时,需要给形参分配存储单元,形参变量是实参变量的副本;如果传递的是对象,还将调用拷贝构造函数...(3)使用指针作为函数的参数虽然也能达到与使用引用的效果,但是,在被调函数中同样要给形参分配存储单元,且需要重复使用"*指针变量名"的形式进行运算,这很容易产生错误且程序的阅读性较差;另一方面,在主调函数的调用点处...因此上面的表达式就是试图将一个const类型的对象转换为非const类型,这是非法的。引用型参数应该在能被定义为const的情况下,尽量定义为const 。

    2.9K30

    【C++】构造函数与析构函数用途 ( 代码示例 - 构造函数与析构函数用途 )

    一、构造函数与析构函数 在 C++ 语言中 , " 构造函数 " 和 " 析构函数 " 都是 C++ 类中的 特殊函数 , 分别用于 初始化对象 销毁对象 ; C++ 类 在创建 实例对象 时自动调用...构造函数 这个特殊函数 , 其主要作用是 初始化对象的成员变量 , 如果需要 可以 执行其他必要的操作 ; 构造函数 的名称与类的名称相同 ; 构造函数 没有返回类型 ; 构造函数 可以带有参数 , 也可以不带参数...; C++ 类 在 销毁 实例对象 时自动调用 析构函数 这个特殊函数 , 其主要作用是 销毁释放对象的成员变量 , 如果需要 可以 执行其他必要的操作 ; 析构函数 的名称 是 ~ 加上 类的名称...; 析构函数 没有返回类型 ; 析构函数 不带参数 ; 二、代码示例 - 构造函数与析构函数用途 在下面的代码中 : C++ 类 Student 类 有 2 个 public 共有成员变量 , public...中 , 使用 malloc 函数 , 为 name 指针分配 100 字节内存 , // 为 name 成员分配内存 name = (char*)malloc(100); 构造函数 中 , 为 name

    69020
    领券