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

C++运算符重载

我们之前提到过C++函数重载,可以根据形参不同调用不同函数,那么运算符重载跟函数重载实现形式差不多,运算符重载一般写法为返回值 operator运算符(参数列表)。...首先自定义一个 person 类,通过运算符重载,实现 对person 类对象 age 属性一系列操作。...输出结果如下: name: 张三 age: 52 1.2 全局函数写法 在成员函数写法,由于在调用加法重载已经指定了一个对象 ( this 指针指向对象 ),所以重载函数内只需要再传递一个参数即可...为前置方式"++p",p值先自增1,然后再返回增1后p值 为后置方式"p++",先返回p值,p值再自增1 比如:p=5, 那么 a = p++ 执行结束后 a=5, p=6, 如果 a=...总的来说,前置运算符和后置运算符如果在不使用返回值情况下,二者作用一样,都是使参数自增;使用返回值,前置运算符返回自增后参数,而后置运算符返回自增之前参数。

86700

(转载非原创)C++运算符重载

我们之前提到过C++函数重载,可以根据形参不同调用不同函数,那么运算符重载跟函数重载实现形式差不多,运算符重载一般写法为返回值 operator运算符(参数列表)。...首先自定义一个 person 类,通过运算符重载,实现 对person 类对象 age 属性一系列操作。...输出结果如下: name: 张三 age: 52 1.2 全局函数写法 在成员函数写法,由于在调用加法重载已经指定了一个对象 ( this 指针指向对象 ),所以重载函数内只需要再传递一个参数即可...为前置方式"++p",p值先自增1,然后再返回增1后p值 为后置方式"p++",先返回p值,p值再自增1 比如:p=5, 那么 a = p++ 执行结束后 a=5, p=6, 如果 a=...总的来说,前置运算符和后置运算符如果在不使用返回值情况下,二者作用一样,都是使参数自增;使用返回值,前置运算符返回自增后参数,而后置运算符返回自增之前参数。

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

C++】标准库类型string

C++定义了String类来封装字符串,并提供了一系列操作字符串方法,它们都位于头文件。...string类对象赋值运算符重载函数 如下,C++98标准对于string类实现了3个重载赋值运算符重载函数: 接下来我们演示使用这三种常见string类赋值运算符重载函数...: 如下代码,分别按上述赋值运算符重载函数顺序调用了相应赋值运算符重载函数赋值了3次string类对象s4: int main() { //构造空string类对象,即空字符串...[]运算符重载 operator[]运算符重载定义:operator[]文档链接 operator[]遍历string类对象: #include #include using...主要是考虑到部分项目中不兼容C++只能转换成C情况,如下,fopen函数不支持传入string类: 如果想要在C++文件中使用C语言函数且参数是string类的话,就可以调用c_str()函数将string

12610

将IP地址字符串分割成数组

记得之前写MFC程序里面CString类有个方法可以以某一字符分割CString对象,但是C++string似乎没有这样方法。...首先用到string一个方法,:find_first_of,四个重载函数: size_type find_first_of( const basic_string &str, size_type index...因为最后找不到'.',就是最后一个数字了。     如果OppPos != string::npos则说明找到了'.'...,进入到这个if语句,但其实iIp[3]还没有赋值,所以iIp[i] = atoi(strIpAdd.substr(nowPos).c_str());是为了把最后一个数字放到iIp[3]。...你们可以看到我这次用substr方法只调用了一个参数,这是个重载函数,substr(nowPos)表示获得从nowPos开始到最后一个字符截止子串。

1.4K20

C++初阶学习第六弹——探索STL奥秘(一)——标准库string类

前言: 在前面,我们学习了C++类与对象,认识到了C++与C语言一些不同,今天,我们将进入C++ 关键部分——STL,学习完这部分之后,我们就可以清楚认识到C++相比于C语言快捷与便利...二、标准库string类 1、什么是string类 我们可以简单把string类理解为变长字符数组,我们可以对它进行增删查改等一系列操作,同时有一些列封装接口函数提供给我们可以让我们直接使用...operator+ 涉及深层拷贝,不建议多用 cout << "operator+后:"; cout << operator+(s1, s2) << endl; //operator>> 输入运算符重载...cout >:"; string s3; operator>>(cin,s3); cout << s3 << endl; //operator<< 输出运算符重载...,至于如何实现这些函数,我们下章再讲 感谢各位大佬观看,创作不易,还请一键三连!!!

6810

C++】模拟实现string类

在上篇博客我们详细介绍了C++标准库string类型,包含它常用成员函数及其使用示例:【C++】标准库类型string https://blog.csdn.net/weixin_...,虽然看似需要实现功能很多,貌似一间不知该如何下手,但我们可以分步分模块来分析这个项目的流程,最后再将各部分进行整合,所以大家不用担心,跟着我一步一步分析吧!...string类对象字符串插入内容.C++标准库insert()函数实现了7个重载版本: 有些过于冗余,我们这里只实现两种版本: 往pos位置插入n个char....我们曾经在Data类详细分析过对自定义类如何重载流插入和流提取函数,如下: 对于string类流插入函数,我们只需要将string类对象字符逐一插入到ostream...: 迭代器衍生品——范围for c++范围for定义如下: 因为范围for底层实现原理是依靠迭代器来实现,所以当我们实现类支持迭代器,就自动支持了范围for,我们可以直接使用范围

13110

C++】string类基本使用

string类重载了+=函数,+=函数也有三种重载函数形式,分别为以常量字符串、string类对象引用、普通字符为参数三个运算符重载函数,这就可以方便我们将自定义类型当作内置类型使用,极大提高了代码可读性...string类还重载了流提取和流插入运算符,这也可以帮助我们快速看到string类对象内容,也提升了代码可读性。 由此可见,重载函数和运算符重载,真是C++伟大之处。 5....void test_string10() { //c_str可以让C++更好兼容C语言,data功能和c_str类似,但平常都用c_str。...下面是string类对象关系运算符重载函数,每一个运算符重载了三个形式,实际上是为了满足多种使用场景。...例如在比较字符串和string类对象运算符左右两侧类型由于写法不同导致类型不同,则对应运算符重载为了满足不同写法,就必须实现多个重载函数。

47110

c++基础语法

c和c++联系 c++代码可以混编c代码,既可以写c也可以调用c c++面向对象,c面向过程 开源框架大部分都是基于c++ 打印 #include "stdio.h" #include <iostream...+ 多态是怎样,默认情况下不存在 // 父类指向子类引用,重写 ,里氏替换原则 // 程序在编译期间并不知晓运行状态(我需要运行那个函数),只要在真正运行过程才会去找需要运行方法...startActivity(activity2); // c++ 多态:动态多态(子父类),静态多态(函数重载)(编译过程确定性区别) getchar(); } 抽象类,抽象函数 //...java 把对象添加到了集合,c++ 中会调用对象拷贝构造函数,存进去是另一个对象 在c++中将对象加入到容器,需要有默认构造函数 析构函数也可能回调用多次,如果说在析构函数释放内存,需要在拷贝构造函数中进行深拷贝...> using namespace std; // 自定义重载 () 运算符 //预定义函数对象 void main(){ // c/c++ 提供了很多定义好函数对象 // 常见几个 less

1.5K30

C++ 运算符重载

运算符重载目的是使得 C++ 运算符也能够用来操作对象。 运算符重载实质是编写以运算符作为名称函数。不妨把这样函数称为运算符函数。...6 C++重载>(C++重载输出运算符和输入运算符)  在 C++ ,左移运算符<<可以和 cout 一起用于输出,因此也常被称为“流插入运算符”或者“输出运算符”。...7 C++重载()(强制类型转换运算符)  在 C++ ,类型名字(包括类名字)本身也是一种运算符,即类型强制转换运算符。...9 C++运算符重载注意事项以及汇总  在 C++ 中进行运算符重载,有以下问题需要注意:  重载运算符含义应该符合原有用法习惯。...例如重载+运算符,完成功能就应该类似于做加法,在重载+运算符做减法是不合适。此外,重载应尽量保留运算符原有的特性。C++ 规定,运算符重载不改变运算符优先级。

1.1K20

C++ 运算符重载

运算符重载目的是使得 C++ 运算符也能够用来操作对象。 运算符重载实质是编写以运算符作为名称函数。不妨把这样函数称为运算符函数。...6 C++重载>(C++重载输出运算符和输入运算符)  在 C++ ,左移运算符<<可以和 cout 一起用于输出,因此也常被称为“流插入运算符”或者“输出运算符”。...7 C++重载()(强制类型转换运算符)  在 C++ ,类型名字(包括类名字)本身也是一种运算符,即类型强制转换运算符。...9 C++运算符重载注意事项以及汇总  在 C++ 中进行运算符重载,有以下问题需要注意:  重载运算符含义应该符合原有用法习惯。...例如重载+运算符,完成功能就应该类似于做加法,在重载+运算符做减法是不合适。此外,重载应尽量保留运算符原有的特性。C++ 规定,运算符重载不改变运算符优先级。

1.2K00

自实现 MyString 类

自实现 myString 类主要目的是剖析系统内部 string 类一些实现方法以及加强对类封装、运算符重载等特性掌握。其中包含了几项非常重要功能实现。 使用构造器创建对象。...赋值运算符重载构造对象。 []运算符重载构造对象数组。 ==运算符重载判断对象是否相等。 +运算符重载实现对象相加。 >> << 流输入输出运算符实现打印和输入。...CMyString & another); // []运算符重载 char operator[](int idx); // ==运算符重载 bool operator=...s3)); s5 = s4 = s3; cout << s5.c_str() << endl; CMyString s6("china"); // 这样操作会进入=号运算符重载函数内...cout << s6.c_str() << endl; // []运算符重载 cout << s6[2] << endl; // ==运算符重载 if (s5

15720

C++ 为什么不加入垃圾回收机制

它将指针包装成了类,并且重载了反引用(dereference)运算符operator *和成员选择运算符operator ->,以模仿指针行为。...,即使在foo函数中发生了异常,str生存期也会结束,C++保证自然退出发生一切在异常发生一样会有效。...>c_str(); cout c_str(); // 未定义,str1内部指针不再有效 某些时候,需要共享同一个对象,此时auto_ptr就不敷使用,由于某些历史原因,C++标准库并没有提供其他形式智能指针...需要同一个类多个对象同时拥有一个对象拷贝,我们可以使用引用计数(Reference Counting/Using Counting)来实现,曾经这是一个C++为了提高效率与COW(copy on...write,改写复制)技术一起被广泛使用技术,后来证明在多线程应用,COW为了保证行为正确反而导致了效率降低(Herb ShutterC++ Report杂志Guru专栏以及整理后出版

81930

C++】STL简介 -- string 使用及其模拟实现

基于上面这些原因,C++标准库提供了 string 类,string 类中提供了各种函数接口,比如类六个默认成员函数、字符串插入删除、运算符重载等等,我们可以使用 string 来实例化对象,然后通过...: 字符串长度小于16,使用内部固定字符数组来存放; 字符串长度大于等于16,从堆上开辟空间 union _Bxty { // storage for small buffer...c_str 在某些场景只支持对C形式字符串,即字符数组进行操作,比如网络传输、fopen,而不支持对C++ string 对象进行操作,所以 string 提供了c_str,用于返回C形式字符串...string 还提供了一些非成员函数重载函数: relation operators 两个 string 对象之间大小关系重载函数: operator> 流插入与流提取运算符重载...: getline C++ cin 和 C语言中 scanf 函数都是以空格、换行、Tab 作为不同数据之间分割标志,即它们遇到这些符号就会停止读取: C语言提供了 gets 函数来读取一行字符

47200

C++修炼之路】8. string类详解

C++对于string定义为:typedef basic_string string; 也就是说C++string类是一个泛型类,由模板而实例化一个标准类,本质上不是一个标准数据类型...7区别,想必大家已经看出,这里str7和str_7是同一个重载函数,并且这个函数具有缺省值,当我们不传入最后一个参数,其就会一直拷贝到字符串末尾为止。...此外,对于内置string类,是支持运算符重载,因此同样也支持流相关重载,即cin、cout: string str1 = "hello world"; cout << "str1 =...事实上对于一些线程,网络,Linux内核等都是通过C实现,因此c_str很好充当了一个C++string与C之间互通,因为我们知道,对于string定义变量名,不是内部字符串地址,因此就出现了...string str = "hello world"; cout << str.length() << str.size(); // 11 11 str.length()与其他类型比较

65900

C++ 插件机制实现原理、过程、及使用

随着系统日益庞大,各种模块之间耦合在一起,修改其中一个模块,其他模块也跟着一起受到影响。假如这两个模块式不同开发人员负责,那么还需要事先沟通好,这样就造成了修改维护困难。...传统程序结构也是有模块划分,但是主要有如下几个缺点: 1: c++二进制兼容问题。 2: 模块对外暴露东西过多,使调用者要关心东西过多。...它最大缺点就是增加了类之间依赖,父类发生改变,其子类也会被动发生改变。介于继承存在这些缺点,我们在复用类,要优先考虑使用“合成”进行复用。...原因是C++编译器会对程序符号进行修饰,这个过程在编译器叫符号修饰(Name Decoration)或者符号改编(Name Mangling)。...++插件架构浅谈与初步实现_臣有一事不知不当讲博客-CSDN博客_c++插件 构建自己C/C++插件开发框架_加油努力4ever博客-CSDN博客_c++插件框架 C/C++:构建你自己插件框架

5.7K41

CC++之string类小结

参考链接: C++ strtoll() (1)C++字符串和C字符串转换           C++提供了三种方法可以将C++字符串转化为C字符串,分别是data(),c_str(),copy()成员函数来实现...1)data()是以字符数组形式返回字符串内容,但并不添加‘\0’;            2)c_str()生成一个const char*指针,指向一个空字符数组,数组数据是临时有一个改变这些数据成员函数被调用时...,数据就会失效(比如说调用c_str()之后字符串发生变化,则c_str()生成指针指向数据也会发生变化)           3)copy(p,n,size_type_off=0)表明从string...类型对象至多复制n个字符到字符指针p指向空间,默认指定位置开始(0),返回真正从对象复制字符。...则会根据具体情况判断进制,如果前面的字符是0x则为16进制,如果是0则为八进制,否则为10进制;函数执行过程中会扫描参数nptr字符串,跳过前面的空格式串,直到遇上数字或正负号开始转换,遇到非法数字或字符串结束结束转换

42200
领券