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

C++】string类(常用接口)

append 这里简单介绍几个,常用是第一个,需要使用时,可去cplusplus网站查阅。 operator+= 实际,我们更喜欢用+=,使用起来更方便。...如果想把空格部分都改成%20,可以和find结合使用: npos是整形最大值,正常来说字符串是没有这个下标位置,通常用来表示没有找到匹配。...还可以用范围for方法进行替换。 c_str 在C++,string对象后面会自动加上'\0'来兼容C语言,c_str作用是返回C格式字符串。...rfind作用是从字符串pos位置开始往前找字符,返回该字符在字符串位置。 上面是find和substr使用场景。这套方法对其他网址分割也是通用。...operator+ operator+使用很简单,重载这么多个是因为可以让char* 和string可以混着用。

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

C++面向对象学习之运算符重载(1)

: 重载运算符作为成员函数 operator () { } 可以看到,重载函数 operator+访问了两个对象成员,一个是对象成员...+”重载为非成员函数后,C++编译系 统将程序表达式 a+b 解释为:operator+(a,b) 即执行 a+b 相当于调用: Complex operator + (Complex &a,Complex...// 正确 , 类型匹配 c3=c2+i; // 错误 , 类型不匹配 请注意,数学上交换律在此不适用。 如果希望适用交换律,则应再重载 一次运算符“+”。 如 Complex operator...针对“++”和“–”这一特点,C++约定: 在自增(自减)运算符重载函数,增加一个 int型形参,就是后置自增(自减)运算符函数。 可以看到: 重载后置自增运算符,多了一个 int 型参数,增加这个参数只是为了与前置自增运算符重载函数有所区别...,此外没有任何作用。 编译系统在遇到重载后置自增运算符,会自动调用此函数。 请注意前置自增运算符“++”和后置自增运算符“++”二者作用区别。 前者是先自加,返回是修改后对象本身。 后者返回是自加前对象

83030

【Example】C++ 运算符重载

那么C++运算符是否可以重载呢?可以!先弄清什么时候需要进行运算符重载: 假设,你有一个类或者结构体,想通过 +、-、*、/ 这种最基本运算符直接进行计算,又或者想用 ==、|| 直接进行比较。...C++运算符重载核心是:operator 关键字 C++当中运算符重载是通过 operator 关键字来实现,当你定义了类或结构体后,编译器肯定无法智能地对类本身进行运算及比较。...下面一段代码是在一个类对 = 进行了一个最简单重载: void operator=(const DataPack &in) { this->name = in.name; this...既然重载了运算符,那么返回值与参数必须与运算符本意相匹配,否则编译器会报错: 【正确】 bool operator==(const DataPack &in) { return this-...+ 标准库 std::condition_variable 【Example】C++ 用于编译封装 Pimpl 演示 (编译防火墙 Private-IMPL) 【Example】C++ 单例模式 演示代码

70830

【C++11特性篇】探究【右值引用(移动语义)】是如何大大提高效率?——对比【拷贝构造&左值引用】

【左值&左值引用】和【右值&右值引用】基础知识 相关基础知识知识点在YY这篇博客中有详细说明:传送门 二.普通传值返回 关于 深浅拷贝 ,在YY这篇博客里有详细介绍:传送门->【C++】STL容器...,提高效率使用场景和价值 func1(s1); func2(s1); // string operator+=(char ch) 传值返回存在深拷贝 // string& operator+=...(char ch) 传左值引用没有拷贝提高了效率 s1 += '!'...把str指针置空,func函数结束其自然被 析构;成功完成过程 3)简述【移动赋值】 移动赋值过程就是: 右值对象 赋值给目标对象,这时调用是 移动构造 本质还是移动构造 4)编译器对【...优先匹配原则, C++11STL容器插入接口函数也增加了 右值引用 版本 ,如下图所示: 它 同时支持 【拷贝构造】和【移动构造】, 构成函数重载 编译器自己会识别参数,找到最合适匹配 void

11510

C++笔记:运算符重载

C++笔记:运算符重载 引言 函数重载就是对一个已有的函数赋予新含义,使之实现新功能,做到“一名多用”。 运算符也可以重载,在C++标准库使用了大量运算符重载。...operator+(Complex &right); //使用友元函数重载运算符+ friend Complex operator+(Complex &left, Complex &right...将双目运算符重载为友元函数,形参表列必须有两个参数,形参顺序任意。...Complex operator+(Complex &c1, Complex &c2) {……} c3 = c1 + c2; //c3= operator+(c1, c2); 在使用运算符,其左侧操作数作为第一个实参...重载运算符规则 C++ 不允许用户自己定义新运算符,只能对已有的 C++ 运算符进行重载。 C++ 绝大部分运算符允许重载。

87720

C++不同构造与三种引用

引言 C++也是支持面向对象语言,也有类概念。与java差异比较大是,没有gc(垃圾回收器),所以设计要考虑好释放,不过也提供了智能指针(自动计数引用,自动释放)。...,但是有时候我们传入可能是左值,也可能是右值,所以当使用泛型右值引用来接收,会自动根据入值是左值还是右值,来自动转化为使用左值引用还是右值引用,这种泛型右值引用也因此被叫为万能引用。...val)); } 类结构 与java类似,c++也是有private、public、protected等访问权限控制符,不过没有default。...然后比较大区别的是,c++默认不写访问权限是private,java是default。还有就是,C++没有访问权限修饰符,把对父类访问权限放到了子类继承方式上。...int operator+(int a,Yyt y){ return y+a; } 按照参数顺序匹配,则a+y会被解释为普通重载函数 operator+(a,y),最终返回 y+a值,另一种方法是使用友元函数

2.2K10

C++重载操作符

重载操作符其实也是一种形式多态,因此只能重载C++本身有的操作符,而且只能按照C++本身有的操作方式来使用,比如你对于“-”号,可以重载来用于两个对象相减,或者用于表示一个对象求负,但是你不能重载一个...“@”号来用于两个对象相加,因为C++本身就没有这种用法。...相加方法 // 实现: Time Time::operator+(const Time &t) { // 至于怎么实现就看你自己了,一般意义上当然是相加,分与分相加等等,还考虑进位 /...你可能会注意到,方法定义参数只有一个参数,实际上这个方法调用过程等于下面这样: Time time3 = time1.operator+(time2); 这就是常规方法使用方式,只不过因为是重载操作符...我们用友元函数来实现int在前加法: // 依然在类定义内,但因为不是成员函数,定义不需要::限定符 // 原型: friend Time operator+(int h, const Time

30920

什么是运算符重载?

什么是运算符重载 为什么要重载运算符 哪些运算符不可以重载 哪些运算符不建议重载 应该遵循哪些原则 如何重载运算符 什么是运算符重载 如果还不知道什么是重载,可以参考《什么是函数重载》和《彻底理清重载函数匹配...*/ } 后面我们就可以直接这样使用啦: Water b1; Water b2; b1 + b2; 这里b1+b2相当于下面的调用: operator+(b1,b2); 在运算符重载里面,要特别提一下+...为了区分这两种情况,C++为后置版本增加了一个额外int类型参数。...除此之外,最基本要求是,重载含义应该与运算符作用于内置类型一样含义。例如说,你不应该重载一个+,用于两个对象比较或者相减。...另外也重载也能非常明显地体现其含义,比如前面例子Water相加,就显得不是特别好,Water相加是什么意思?

1.6K20

C++ Primer Plus习题及答案-第十八章

使用用大括号括起初始化列表语法重写下述代码。...在下述简短程序,哪些函数调用不对?为什么?对于合法函数调用,指出其引用参数指向是什么。...将右值传递给函数,const左值引用参数将指向右值临时拷贝。将左值传递给非const左值引用参数,参数将被初始化为左值;但非const左值形参不能接受右值实参。 3. a....另外两个实参均为右值,const左值引用可以指向他们拷贝。【将右值传递给函数,const左值引用参数将指向右值临时拷贝。】。...要让这个类适合定义移动构造函数,应如何修改存储4000个double值方式? 移动构造函数是在转让数据所有权可行时候是合适。但对于标准数组没有转让所有权机制,因此不适合给该类定义移动构造函数。

60230

C++】标准库类型string

C++定义了String类来封装字符串,并提供了一系列操作字符串方法,它们都位于头文件。...+对于string类实现了1个析构函数: 该函数没有参数,没有返回值,在类对象生命周期结束后自动调用销毁类对象....c,返回该字符在字符串位置substr在str从pos位置开始,截取n个字符,然后将其返回 push_back()函数 push_back()函数定义: 使用push_back()函数在string...operator+=次数更多,因此后面会重点介绍operator+=: 使用append()函数在string类对象后追加内容: int main() { string st1("Hello worl...主要是考虑到部分项目中不兼容C++只能转换成C情况,如下,fopen函数不支持传入string类: 如果想要在C++文件中使用C语言函数且参数是string类的话,就可以调用c_str()函数将string

12010

C++】运算符重载

注:最后有面试挑战,看看自己掌握了吗 文章目录 C++ 运算符重载 博主昵称:一拳必胜客 特别鸣谢:木芯工作室 、Ivan from Russia ---- C++ 运算符重载 您可以重定义或重载大部分...C++ 内置运算符。...这样,您就能使用自定义类型运算符。 重载运算符是带有特殊名称函数,函数名是由关键字 operator 和其后要重载运算符符号构成。...Box operator+(const Box&); 声明加法运算符用于把两个 Box 对象相加,返回最终 Box 对象。大多数重载运算符可被定义为普通非成员函数或者被定义为类成员函数。...如果我们定义上面的函数为类非成员函数,那么我们需要为每次操作传递两个参数,如下所示: Box operator+(const Box&, const Box&); #include

50410

C++C++运算符重载-基础

“<<”是C++左移运算符,但是在输出操作与cout配合被称为流插入运算符,可以进行输出。 “>>”是右移运算符,与cin配合使用被称为流提取运算符。 它们都被称为运算符重载。...我们也可以根据我们需要对C++现有的运算符进行重载,来赋予这些运算符新含义。 如CTime类,重载+运算符,实现两个CTime对象相加。...CTime重载+运算符实现两个CTime对象相加, time1 + time2 首先需要定义一个重载运算符函数,此后在执行被重载运算符,系统将自动调用该运算符函数。...运算符重载格式:返回类型 operator运算符(参数列表) CTime operator+(CTime& time1, CTime& time2) 重载运算符函数可以作为一般函数,也可以作为类成员函数...CTime operator+(CTime& time) 下面通过代码来看吧 普通,通过函数来相加: friend CTime addTime(CTime& time1, CTime& time2

36510

C++】类和对象练习——日期类实现

前言 在上一篇文章我们学习类和对象过程,我们不是写了一个日期类嘛。 但是我们之前实现日期类并不是很完整,我们只是借助它来帮大家学习类和对象知识。...那现在有一个问题,如果我们实例化对象日期不合法呢?...C++规定:后置++重载多增加一个int类型参数,但调用函数该参数不用传递(它作用就是为了构成重载),编译器自动传递。 所以呢,这样搞就行了。...我们前置++和后置++就搞定了,那在调用地方呢,我们正常去用就行了,编译器会自动识别匹配。...大家记不记得: 我们之前文章里学习C++输入输出时候,其实只是浅浅提了一下如何去用,并没有对cout、>进行过多讲解。

25710

C++之运算符重载(一)

C++支持运算符重载。运算符重载好处是使得使用类的人更加方便。设计类的人只不过是把设计函数变成了设计运算符重载。因此,运算符重载本质仍旧是一个函数。...要想使用运算符重载,必须借助关键字operator。 C++对运算符重载是有限制,其中: . :: ?...可以看到无论是直接使用+还是使用operator+函数来调用,都完成了c1和c2相加工作。此次运算符重载使用了类提供接口获取私有成员值。更一般做法是将全局运算符重载声明为类友元函数。...c1.b + c2.b); return tmp; } 这就是友元函数经常使用地方。...出于这一点考虑,C++要求后置运算符重载含有一个占位参数。这个参数什么用都没有,只是为了让编译器确定这是后置运算符。

44030

C++】泛型编程 ⑪ ( 类模板运算符重载 - 函数实现 写在类外部不同 .h 头文件和 .cpp 代码 )

将 类模板 函数声明 与 函数实现 分开进行编码 , 有 三种 方式 : 类模板 函数声明 与 函数实现 都写在同一个类 , 也就是没有分开进行编码 ; 类模板 函数实现 在 类外部进行 ,...函数声明 和 实现 写在相同 .cpp 源码文件 ; 类模板 函数实现 在 类外部进行 , 函数声明 和 实现 写在不同 .h 和 .cpp 源码文件 ; 在博客 【C++】泛型编程 ⑨ (...类模板运算符重载 - 函数声明 和 函数实现 写在同一个类 | 类模板 外部友元函数问题 ) 实现了第一种情况 , 类模板 函数声明 与 函数实现 都写在同一个类 , 也就是没有分开进行编码...; 在博客 【C++】泛型编程 ⑩ ( 类模板运算符重载 - 函数实现 写在类外部同一个 cpp 代码 | 类模板 外部友元函数二次编译问题 ) , 分析了 第二种情况 , 类模板 ...; 一、类模板运算符重载 - 函数实现 写在类外部不同 .h 头文件和 .cpp 代码 1、分离代码 后 友元函数报错信息 - 错误示例 上一篇博客 【C++】泛型编程 ⑩ ( 类模板运算符重载

18910

C++】泛型编程 ⑫ ( 类模板 static 关键字 | 类模板 static 静态成员 | 类模板使用流程 )

将 类模板 函数声明 与 函数实现 分开进行编码 , 有 三种 方式 : 类模板 函数声明 与 函数实现 都写在同一个类 , 也就是没有分开进行编码 ; 类模板 函数实现 在 类外部进行 ,...类模板运算符重载 - 函数声明 和 函数实现 写在同一个类 | 类模板 外部友元函数问题 ) 实现了第一种情况 , 类模板 函数声明 与 函数实现 都写在同一个类 , 也就是没有分开进行编码...T> , 其中 T 类型可以改为其它字母代替 , 一般是大写字母 ; 2、类模板 使用 使用类模板 : 使用 类模板 创建实例对象 , 首先要注明 具体类型 , 生成具体类 , 才能创建具体类...声明 类模板 类型参数 ; template 然后 , 使用 域操作符 :: 访问类模板函数 , 访问需要 注明 类模板 实际参数类型 ; 函数返回值类型...template T Student::m_a = 0; 最后 , 使用 类模板 静态成员 , 每个 生成 具体类型 , 都有一个独立互不干扰 静态成员 ;

19110

C++进阶】深入STL之string:模拟实现走进C++字符串世界

前言:在C++,string是一个极其重要且常用类,它为我们提供了丰富字符串操作功能。...然而,了解其背后实现原理,不仅可以帮助我们更好地使用它,还能让我们对C++内存管理、模板编程等有更深入理解。...我们发现s1和s2都指向都一块空间,在释放同一块空间是不可以被释放多次,从而引起了崩溃,而这就是浅拷贝! 浅拷贝: 也称位拷贝,编译器只是将对象值拷贝过来。...return *this; } 因为在添加+=既可以添加字符也可以添加字符串,往往在日常使用频率是最高,所以推荐大家使用+=来代替push_back和append 8....总结 经过对STLstring深入探索与模拟实现,我们仿佛揭开了一个隐藏在C++深处奇妙世界。

12010
领券