在类中,如果你不希望某些数据被修改,可以使用const关键字加以限定。const 可以用来修饰成员变量和成员函数。...初始化 const 成员变量只有一种方法,就是通过构造函数的初始化列表,这点在前面已经讲到了,请猛击《C++初始化列表》回顾。...const成员函数(常成员函数) const 成员函数可以使用类中的所有成员变量,但是不能修改它们的值,这种措施主要还是为了保护数据而设置的。const 成员函数也称为常成员函数。...常成员函数需要在声明和定义的时候在函数头部的结尾加上 const 关键字,请看下面的例子: class Student{ public: Student(char *name...需要强调的是,必须在成员函数的声明和定义处同时加上 const 关键字。
一、常量成员函数 1、const 修饰成员函数分析 在 C++ 类中 , 普通的非静态成员函数 , 可以使用 const 进行修饰 , 在 下面的 Student 类中 , 定义了 void fun(int...age, int height) 成员函数 , 下面使用 const 关键字修饰该类 ; 使用 const 修饰 成员函数 , 写法如下 , 在 fun() 之后使用 const 关键字修饰 函数 :...在 * 右边修饰的是指针本身 ; 代码示例 : class Student { public: // 使用 const 修饰 类的成员函数 // const 关键字可以 // 在 void...const int age; // 年龄 const int height; // 身高 如果 成员函数 被 const 关键字 声明为 常量成员函数 , 则在该函数中 不能修改 类对象中的 任何成员变量...// 使用 const 修饰 类的成员函数 // const 关键字可以 // 在 void fun(int age, int height) 之后 , 大括号之前 , // void
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函数,
引言 在C++中,const成员函数是面向对象编程中保障数据安全性的重要机制。它通过限制函数对类成员的修改权限,提升代码的健壮性和可维护性。...基本语法 在成员函数的参数列表后添加const关键字,表明该函数不会修改类的非静态数据成员。...简单来说: 普通对象可以调用const成员函数和普通成员函数,const对象只能调用const成员函数 三、特殊场景与进阶技巧 1. mutable关键字 若需在const函数中修改某些成员,可用mutable...支持常量对象:确保const对象仅调用安全函数。 编译器辅助检查:在编译阶段捕获非法修改行为。 正确使用const成员函数,是编写高质量C++代码的重要习惯。...参考实现与扩展阅读 《Effective C++》:条款3“尽可能使用const” 《C++ Primer》:第7章“类”
5、const成员函数不能调用非const成员函数 6、非const成员函数可以调用非const成员函数 我们知道c++在类的成员函数中还会隐式传入一个指向当前对象的this指针,所以在test类中,...实际的print函数应该是这样的void print(test * this);,这代表一个指向test对象的指针this被传入到了print函数中 假如现在我们用test类创建一个对象, 1 test...test* this,即这时会出现类型不匹配的错误,在visual studio 中会出现类似于下面的错误: 4 所以通过上面的说明,我们知道了为什么const 对象不能调用非const成员函数。...下面解释为什么const 对象可以调用const成员函数, 1 class test{ 2 public: 3 void print()const; 4 }; 前面我们把非const成员函数print...* this; 是和void print() const;中this指针的类型是一样的,所以常量对象可以调用const成员函数。
目录 前言 1.const成员函数 2.取地址以及const取地址操作符重载 3.流插入流提取运算符重载 4.结语 1.const成员函数 const成员函数是指在函数声明和定义时使用const关键字修饰的成员函数...const修饰类成员函数,实际修饰该成员函数隐含的this指针,表明在该成员函数中不能对类的任何成员进行修改。...2.取地址以及const取地址操作符重载 这两个默认成员函数一般不用重新定义,编译器默认会生成; 在C++中,使用&操作符可以取得一个对象的地址。...对于const对象,也可以使用&操作符来取得其地址; 在C++中,可以重载&操作符,假设有一个类Date,可以在类中重载&操作符,如下所示: class Date { public : Date*...在C++中流插入提取操作符重载是不可以重载成成员函数,因为它们参数的顺序不可以改变,例如: 这是因为流插入第一个运算符是cout,而如果将其重载为成员函数第一个参数就是类和对象中隐含的this指针
类与对象 流操作符重载 1 << 重载 2 >> 重载 const 修饰 Thanks♪(・ω・)ノ谢谢阅读!!! 下一篇文章见!!!...(Date* this, ostream& out) 作为成员函数重载,this指针占据第一个参数,Date必须是左操作数!...那为了规避这个问题,我们就要把函数中参数的顺序改变,所以我们的重载就不能是成员函数。...我们把重载函数来看呢 这时我们可以正确的输出了,但是代价是我们成员变量改为公有了,不然我们在重载函数无法访问成员变量,这就让我们这个类变得不够安全,所以这里使用友元来解决。...: 所以需要加入const修饰: 对于一些只读的函数,我们可以都加上const 让代码鲁棒性更加强大。
参考链接: 如何通过C++函数传递和返回对象? 一个实体拥有自己的属性和行为,属性是私有的,行为是共有的,在C++中实体对应的就是对象,实体抽象数据类型就是类,属性是成员变量,行为是成员函数。 ...protected:(继承和派生)一子类可以访问父类的保护成员。 private:只有在类中才能被访问。 ...在C++中,结构体默认是全部都可见的,而类中默认是私有的。 ...空类的实例中不包含任何信息,本来求sizeof应该是0,但是当我们声明该类型的实例的时候,它必须在内存中占有一定的空间,否则无法使用这些实例。至于占多少内存,由编译器决定。VS中是1。 ...那么类中定义和类外定义有什么区别呢?? ①如果在类中定义,在函数调用的时候编译器会当做内联函数处理,在调用点将代码展开; ②如果在类外定义,在函数调用时和普通函数一样,进行栈桢的开辟和回退。
const 成员函数是指在类中被声明为 const 的成员函数 将const修饰的“成员函数”称之为const成员函数,const修饰类成员函数,实际修饰该成员函数隐含的this指针,表明在该成员函数中不能对类的任何成员进行修改...小结:const 关键字的使用只会导致权限的放小,不会导致权限的放大。...,它是定义在类外部的普通函数,不属于任何类,但需要在类的内部声明,声明时需要加friend关键字。...比如上述Time类和Date类,在Time类中声明Date类为其友元类,那么可以在Date类中直接访问Time类的私有成员变量,但想在Time类中访问Date类中私有的成员变量则不行。...,只不过此时计算机还不清楚,想要让计算机识别人想象中的洗衣机,就需要人通过某种面相对象的语言(比如:C++、Java、Python等)将洗衣机用类来进行描述,并输入到计算机中 经过2之后,在计算机中就有了一个洗衣机类
呀哈喽,我是结衣 今天给大家带来的是类里面的默认成员函数,一共有六个默认的成员函数哦,包括构造函数,析构函数,拷贝构造函数,运算符重载函数,const成员函数,那么正篇开始。...类的6个默认成员函数 如果一个类中什么成员都没有,简称为空类。 空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。...1.3C++11的更新 在C++11的标准里,针对内置类型的成员不能初始化的缺陷,打了个补丁,就是:内置类型成员变量在类中声明时可以给默认值 #include using namespace...而对象在销毁时会自动调用析构函数,完成对象中资源的清理工作。 2.2特性 析构函数是特殊的成员函数,其特征如下: 析构函数名是在类名前加上字符 ~。 无参数无返回值类型。 一个类只能有一个析构函数。...注意:如果类中没有申请资源时,析构函数可以不写,直接使用编译器生成的默认析构函数,比如 Date类;有资源申请时,一定要写,否则会造成资源泄漏,比如Stack类。 完
空类 class Empty { } 空类包含的函数(6个) class Empty { public: Empty(); // 缺省构造函数// Empty( const Empty& ); // 拷贝构造函数...// ~Empty(); // 析构函数// Empty& operator=( const Empty& ); // 赋值运算符// Empty* operator&(); // 取址运算符 const...Empty* operator&() const; // 取址运算符 const };
1.2特征(1)拷贝构造函数是构造函数的一个重载形式(2)参数有且只有一个,必是类类型对象的引用,使用传值编译器会直接报错(因为会引发无穷递归调用1.3拷贝构造函数典型调用场景使用已存在对象创建新对象函数参数类型为类类型对象函数返回值类型为类类型对象简单代码示例一...如Stack类,Queue类,List类等2. 赋值运算符重载在了解赋值重载函数之前,我们需要了解什么是运算符重载,这里做一个简单的介绍。...此时用户再在类外自己实现一个全局的赋值运算符重载,就和编译器在类中生成的默认赋值运算符重载冲突了,故赋值运算符重载只能是类的成员函数。...内置类型成员变量是直接赋值的,而自定义类型成员变量需要调用对应类的赋值运算符重载完成赋值。注:如果类中未涉及到资源管理,赋值运算符一般不用显示实现;一旦涉及到资源管理则必须要实现。...const修饰类成员函数,实际修饰该成员函数隐含的this指针,表明在该成员函数中不能对类的任何成员变量进行修改。
类模板中成员函数和普通函数创建时机是有区别的: 普通类中的成员函数一开始就创建; 类模板中的成员函数在调用时才创建。
很多C++的初学者看到const这个关键字的第一反应都是一头雾水,主要是因为const可以出现在很多的位置,以及后面加入的constexpr更是常常感到困惑,今天就为大家一一解释出现它们的含义和以及作用...很多的全局变量都是通过常量来进行修饰,需要注意的是,使用const关键字修饰的变量需要立刻初始化 // 修饰局部变量,全局变量,成员变量 const int a = 2; // 错误,表达式必须是可修改的左值...引用 这是const最常用的一种方式,通常用于函数的参数列表中,因为我们知道在C++中函数参数有3中传递方式,分别是值传递,指针传递(或者叫地址传递),引用传递,前两种在传递时都会发成拷贝行为 指针本身也是一个变量...是C++11中引入的一个关键字,它的作用主要是用来修饰一些函数和变量,使其成为常量表达式,从而在编译器就可以进行计算,进一步提高程序运行期的效率 常量表达式:指的是有一个或多个常量组成的表达式,在实际开发中经常会接触到常量表达式...const_cast类型转换来修改值,而constexpr是不可以修改的,其实可以将const理解为只读变量更符合其含义 const只能用于非静态成员函数,而constexpr可以和成员,非成员,构造函数一起使用
搜了一圈答案,基本上都是启动线程的时候传入this指针,在线程函数内部再强转的解决方案。可能显得有些别扭。 编译器不允许强制转换,那就用union来实现。...do_thread; pthread_t pid; pthread_create(pid, 0, func.trfunc, this); pthread_detach(pid); do_thread是非静态类成员函数
时隔多天的类中的默认成员函数,在上篇博客中我们讲了,构造函数和析构函数。简单回顾下,构造函数就是类似于初始化函数,他的函数名与类名相同,且没有返回值。...为什么会这样呢? 编译器默认生成的拷贝构造函数,默认拷贝构造函数是按照值拷贝的,即将s中的内容原封不动的拷贝到s2.由此 s和s2指向了同一块内存空间。...那么此时用户还在类外自己实现一个全局的赋值运算符重载,就和编译器在类中生成的默认赋值运算符重载冲突了,所以赋值运算符重载只能是类的成员函数。...C++规定:后置++在重载时多增加一个int类型的参数,但调用函数时不用传第,编译器会自动传递。...3.const成员 将const修饰的“成员函数”称为const成员函数,const修饰成员函数实际修饰该成员函数隐含的this指针,表明在该成员函数中不能对类的任何成员进行修改。
函数声明 和 实现 写在相同的 .cpp 源码文件中 ; 类模板 的 函数实现 在 类外部进行 , 函数声明 和 实现 写在不同的 .h 和 .cpp 源码文件中 ; 在博客 【C++】泛型编程 ⑨ (...; 在博客 【C++】泛型编程 ⑩ ( 类模板的运算符重载 - 函数实现 写在类外部的同一个 cpp 代码中 | 类模板 的 外部友元函数二次编译问题 ) 中 , 分析了 第二种情况 , 类模板 的...函数实现 在 类外部进行 , 写在 一个 cpp 源码文件中 ; 在博客 【C++】泛型编程 ⑪ ( 类模板的运算符重载 - 函数实现 写在类外部的不同的 .h 头文件和 .cpp 代码中 ) 中 ,...static 关键字 1、类模板 static 静态成员 类模板中 , 定义了 static 静态成员变量 ; 静态 成员变量 是属于整个类的 , 但是对于 类模板 来说 , 存在着二次编译 , 会生成多个不同的实际类...不同的类 , 每个类 都有一个 static 静态成员 , 相互之间是独立的 ; 2、类模板 static 关键字 用法 类模板 static 关键字 用法 : 首先 , 在 类模板 中 , 声明 static
return value;//返回值通过eax寄存器带回 } int main(){ int &a=GetInt();//错误 //引用初始化的值要能取地址,寄存器没有地址 修改为:const...=GetInt(); return 0; } 二、返回局部变量的地址 //不能返回局部变量的地址或引用 int* GetIntPtr(){ int value=10; //const...int value=10;是数据,在.data段,这种情况可以返回地址 return &value; //lea eax,[value] } int main(){ int*...GetIntPtrRef(){ static int data=10; static int *p=&data; return p; } 临时量的产生由三种不同的情况: 1.函数调用之前...2.函数的return语句处 3.函数调用之后
一、const 成员函数 1.1 什么是const 成员函数 cosnt 的成员函数其实就是在我们 函数的括号外 多加一个 const void Dlsplay() const 其他的作用是修饰 隐含的...1.2 const成员函数的注意事项 const 成员可以直接修饰this指针那么使用起来有什么要注意的嘛?...所以构造函数并不是初始化成员变量的地方,而我们在进行类声明的时候给的的默认值夜也只是声明 3.2 初始化列表 在C++中规定了所有成员变量在初始化的时候都是在初始化列表进行初始化的 初始化列表:以一个冒号开始...(初始化只能初始化一次) 类中包含以下成员,必须放在初始化列表位置进行初始化: 引用成员变量 const成员变量 自定义类型成员(且该类没有默认构造函数时) 规则一 尽量使用初始化列表初始化,因为不管你是否使用初始化列表...这个我相信很好了解,初始化列表不管我们写没写都会在初始化列表进行初始化 所以对于简单的变量初始化建议使用初始化列表 一些复杂的类初始化可以使用在构造函数体内进行初始化 规则二 成员变量在类中声明次序就是其在初始化列表中的初始化顺序
前言 本文将深入探讨C++中的运算符重载,重点讲解赋值运算符、前置/后置++运算符、取地址运算符的重载方法,以及const成员函数的定义和使用方法。...通过日期类的实现示例,展示运算符重载和const成员函数在实际应用中的具体代码实现,帮助读者更好地理解和运用这些C++特性。 博客主页: 酷酷学!!! 感谢关注~ 正文开始 一...., 此时用户再在类外实现一个全局的赋值运算符重载, 就和编译器在类中生成的默认赋值运算符重载冲突了, 故赋值运算符重载只能是类中的成员函数....Date& d); 内联函数和static修饰的成员函数不具备外部链接属性,没有函数名修饰, 只能在内部使用, 而普通函数在.h文件中写之后, 会被展开到, test.cpp和Date.cpp会重复定义...return 0; } 三. const成员函数 将const修饰的“成员函数”称之为const成员函数,const修饰类成员函数,实际修饰该成员函数 隐含的this指针,表明在该成员函数中不能对类的任何成员进行修改
领取专属 10元无门槛券
手把手带您无忧上云