C++const成员规则

越来越讨厌C++了,一个简单的const成员变量都搞得这么麻烦。

概念:const成员变量、const成员函数、const类变量

  • const成员变量是初始化后就不能再改变的。在整个过程中都始终如一。素以不允许有赋值操作。
  • const成员函数是保证不会修改成员变量的成员函数。
  • const类变量是指声明一个类变量时使用了const,比如const A a;

意义:

const成员变量保证一个变量的值永远不变。

const成员函数保证永远不会改变类的状态。(永远不会修改变量的值)

规则:

规则一:

const成员变量只能在构造函数的初始化列表中初始化,不能在构造函数体内赋值。否则会产生只读数据的写错误。

规则二:

const成员变量不能出现任何赋值操作。

规则三:

非const成员函数和const成员函数都可以读访问非const类变量的const或非const成员变量。

规则四:

非const成员函数不可以访问const类变量的任意成员变量。只有const成员函数可以。

规则五:

const成员函数中不允许有任何对成员变量的赋值操作。(保证其不会修改成员变量值)

规则六:

const成员函数不能调用非const成员函数。(还是为了保证不会修改成员变量值,天知道你调用的非const成员函数会干什么)

价值观:(这些能帮助你理解记忆)

const变量:我是永恒的,任何赋值操作都是对我的侮辱。(规则一二)

const成员函数:所谓瓜田不纳履,李下不整冠,我懂得避嫌(规则五);而且我任人唯信,那些没有const认证的家伙有好有坏,我不能信任它们。我知道它们中间可能有好人,但得排除风险不是吗?(规则六)

const类变量:我出生时就打上了const的高贵印记,我只能做出高尚的行为。(规则四)

实现原理:待续。。。

时间: 2024-10-18 06:52:45

C++const成员规则的相关文章

拷贝构造函数和const成员函数

实验原因 说明如何使用const描述保护类数据不会意外修改. 编译环境 vc6sp6 + win7x64 工程下载 copyConstruction_constMemberFunction.zip 使用非const成员函数,引起的拷贝构造函数报错 [cpp] view plain copy class CStudent { /// 常量定义 public: enum {NAME_SIZE_MAX = 64}; /// 构造, 拷贝构造, 析构函数 public: CStudent(); CStu

c++中的const参数,const变量,const指针,const对象,以及const成员函数

const 是constant 的缩写,“恒定不变”的意思.被const 修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性.所以很多C++程序设计书籍建议:“Use const whenever you need”. 1.用const 修饰函数的参数 如果参数作输出用,不论它是什么数据类型,也不论它采用“指针传递”还是“引用传递”,都不能加const 修饰,否则该参数将失去输出功能.const 只能修饰输入参数: 如果输入参数采用“指针传递”,那么加const 修饰可以防止意外地

c++ const: const 变量, const 输入参数, const 返回值, const 成员函数

看到const 关键字,C++程序员首先想到的可能是const 常量.这可不是良好的条件反射.如果只知道用const 定义常量,那么相当于把火药仅用于制作鞭炮.const 更大的魅力是它可以修饰函数的参数.返回值,甚至函数的定义体. const 是constant 的缩写,“恒定不变”的意思.被const 修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性.所以很多C++程序设计书籍建议:“Use const whenever you need”. 1.用const 修饰函数的参数

类的const成员

类的const成员包括const数据成员和const成员函数: 1.const数据成员: 和普通的const变量一样,定义时初始化,且不能修改 2.const成员函数: const成员函数只能访问其他的const成员函数,而不能访问非const成员函数 const可以修饰static数据成员,在定义时初始化,但仍要在类外进行声明 const成员函数不能修改类的对象,即不能修改数据成员,但当数据成员被mutable修饰时,可以修改 const不能修饰static成员函数,因为const表示不修改类

C++中类const、static、static const成员变量

#include<iostream> using namespace std; class Test { private: const int a;  //const 成员变量只能在构造函数的成员初始化列表中初始化,不能在函数体中和其他地方 static int b; //static 成员变量需要在全局范围内初始化,格式: 类型名 类名::变量名 = 值 static const int c;//static const 成员变量需要在全局范围内初始化,格式:类型名 类名::变量名 = 值

const成员函数

本文结论: const对象.指向const对象的指针或引用只能用于调用其const成员函数. 实例说明: class A { public: void mf1(){ cout<<"Function Call"<<endl; } void mf2() const{ cout<<"const Function Call"<<endl;} }; int main() { A a; a.mf1(); //ok a.mf2();

C++类const成员函数

c++类中可以用const关键字来声明不修改对象的成员函数,它使用时需要注意: 1.常量对象只能调用const成员函数 2.非常量对象可以调用const成员函数 以下列代码为例,来解释: 1 class Person{ 2 public: 3 void print(){ 4 cout<<"I am a common function!"<<endl; 5 } 6 void show()const{ 7 cout<<"I am a const

const成员或者引用成员必须使用构造函数初始化列表的方式

#include<iostream.h> class A { const int a; int b; }; void main() { A obja; }编译出现如下错误:error C2512: 'A' : no appropriate default constructor available;如果将const去掉就没错了! #include<iostream.h> class A { public: const int a; int b; A(int x):a(x){} };

C++基础知识---static const成员变量的初始化

为了将常量的作用域限制于class内,你必须让让成为class的一个成员:而为确保此常量之多只有一份实体,你必须让让成为一个static成员: Class Gameplayer { Private: Staticconst int Number = 5;  //常量声明式 Intscores[Number];  //使用该常量 }: 然而你所看到的是Number的声明式而非定义式.通常C++要求你对你所使用的任何东西提供一个定义式,但如果他是个class专属常量又是static且为整数类型,则需