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

C++ 流插入和流提取运算符的重载

— 1 — 运算符的重载 C++ 在输出内容时,最常用的方式: std::cout << 1 <<"hello"; 提出问题: 那这条语句为什么能成立呢? cout 是什么?...return *this; } 那么在使用流插入运算符时,等价于的形式如下: 01 数据类型是int类型时: std::cout << 1; 上面的语句,等价于: cout.operator...上面的语句,等价于: ( cout.operator<<(1) ).operator<<("hello"); — — 假定我们要想把某个对象里的内容进行打印输出,那么我们可以重载 ostream 类的流插入...---- — 2 — >> 运算符的重载 还是以 CStudent 类作为例子,假设想通过键盘的输入的内容,来初始化对象,则我们可以重载 istream 类的流提取 >> 运算符。 ?...输入内容和输出内容: // 输入内容: 1,20,小林coding // 输出内容: 1,20,小林coding ---- — 3 — 小结 要想流插入 运算符和流提取 >> 运算符能针对自定义的对象

1.1K10

【C++】流插入、提取运算符和类型转换

流插入,流提取运算符重载和类型转换的讲解和实例 重载流插入和提取运算符的运算符函数,不能作为类的成员函数,只能作为普通函数 流插入,流提取运算符重载 流插入运算符”流提取运算符”>>”也可以被用来重载...“运算符是有两个操作数的,它是一个双目运算符,平时貌似只给了它一个操作数,形如cout< cout<<time; cin>>time; 重载流插入和提取运算符的运算符函数,不能作为类的成员函数,只能作为普通函数...注意: **重载”流插入运算符的函数第一个参数和返回类型必须是ostream&类型。 重载”>>”流提取运算符的函数第一个参数和返回类型必须是istream&类型。...** 第二个参数是用户自定义的类 流提取运算符”<<”重载 ostream& operator返回ostream类的对象output...CTime time(10, 50, 20); CTime time2(12); cin >> time; //在我们重载了输入输出运算符之后,我们也可以像C++里面预定义好的数据类型一样对这个类的对象进行输入输出

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

    九、运算符重载

    例如,在自定义的复数类中重载 + 和 * 运算符,可以让我们直接使用这些运算符来进行复数的加法和乘法,而不是调用像 add() 和 multiply() 这样的方法。...位运算符重载 在C++中,位运算符重载允许你为自定义类型定义位运算符(如位与&、位或|、位异或^、位取反~、左移>)的行为。...输入输出流重载 在C++中,输入输出流重载(IO stream overloading)允许你为自定义类型定义插入运算符(operator运算符(operator>>)的行为,这样你就可以使用标准输入输出流...重载插入运算符(operator<<) 插入运算符流中,比如打印到控制台。这个运算符通常作为非成员函数重载,并声明为类的友元,以便它能够访问类的私有和保护成员。...函数返回对象的值(注意是返回对象,而不是引用),通常是修改前的值。这通常通过创建一个临时对象(当前对象的副本)并在修改当前对象之前返回该临时对象来实现。 2.

    16210

    C++从入门到精通——C++输入和输出

    使用cout函数进行输出时,可以使用插入运算符(插入到输出流中。...当在输出流中插入endl时,它会在输出流中插入一个换行符,并刷新输出缓冲区。刷新输出缓冲区的作用是将缓冲区中的内容立即刷新到输出设备上,而不是等待缓冲区满或程序结束时才刷新。...cout和cin是全局的流对象,endl是特殊的C++符号,表示换行输出,他们都包含在包含头文件中。 流插入运算符,>>是流提取运算符。...主要区别如下: 语法:printf和scanf使用C语言的函数调用语法,而cout和cin使用C++的流对象调用语法。 C++特性:cout和cin支持C++的一些特性,如运算符重载、类型安全等。...错误处理:printf和scanf的错误处理相对简单,它们返回一个错误代码来指示是否成功。而cout和cin则使用C++的异常机制来处理错误。

    1K10

    C++ Primer Plus 第02章 开始学习C++ 学习笔记

    [使用cout显示字符串.png] 初识运算符重载 插入运算符,也可以是左移运算符。 典型的运算符重载的情况,通过重载,同一个运算符代表不同的含义。具体含义编译器会通过上下文来确定。...常见的运算符重载例子 & ----> 既表示地址运算符,又表示按位AND运算符。 * ----> 既表示乘法,也表示对指针解除引用。...控制符endl cout<<endl; endl 是C++中的一个特殊符号,作用:重起一行。 在输出流中插入endl使得屏幕光标移到下一行开头。...显示字符串时,在字符串中包含换行符,而不是在末尾添加endl,可减少输入量。...cout 的对象属性包含一个插入运算符 插入到输出流中。 运算符可以进行多条输出语句的拼接。 3.2 类的简介 类是C++ 面向对象编程(OOP)的核心概念之一。

    74000

    C++核心准则编译边学-F.20 输出结果时更应该使用返回值而不是输出参数

    F.20: For "out" output values, prefer return values to output parameters(输出结果时更应该使用返回值而不是输出参数) Reason...返回值本身可以说明用途,而引用类型可以是输入/输出参数也有可能只是输出参数,容易被误用。...译者注:POD是Plain old data structure的简称,是C++语言的标准中定义的一类数据结构,可以简单地理解只包含单纯数据类型的结构体。...// OK void val(int&); // Bad: Is val reading its argument 译者注:示例代码说明的是POD使用引用传递输出值,而小数据者应该直接使用返回值...警告返回常数值的状况。修改方法:去掉常量修饰,返回一个非常量。

    1.4K30

    C++核心准则C.90:依靠构造函数和赋值运算符,而不是内存初始化和内存拷贝‍

    C.90: Rely on constructors and assignment operators, not memset and memcpy C.90:依靠构造函数和赋值运算符,而不是内存初始化和内存拷贝‍...Reason(原因) The standard C++ mechanism to construct an instance of a type is to call its constructor...标准C++机制通过调用构造函数构造某个类型的实例。正如C.41说明的:构造函数应该生成一个完全初始化的对象。不应该要求额外的初始化,例如使用memcpy。...类型应该提供一个拷贝构造函数和/或者拷贝复制运算符以便适当地生成类的拷贝并维持类的不变量。使用memcpy拷贝一个非平常可拷贝类型的行为没有定义。通常会导致断层或者数据破坏。

    97620

    从零开始:C++ String类的模拟实现

    通过这篇文章,您将学到如何在C++中进行动态内存分配和管理,如何实现深拷贝和移动语义,如何重载运算符以提升类的易用性,等等。...,还需要检查一下插入的位置是否合法,insert的效率也不是很高,因为它需要移动插入位置后面的整个子串,当头插的时候时间复杂度变成了O(N) void string::insert(size_t pos...插入一个字符串,可以直接服用insert插入单个字符串的版本,这里我写成了注释,大家可以试试,如果不想复用还是可以参考上面插入单个字符串的思路,但是需要注意的是,移动的距离不是1了变成len了,还有一个需要注意的点..._str); } 4.6流插入和流提取 流插入 注意:流插入重载的时候需要清除前面的字符串,所以这里我们提供了一个clear函数进行以前字符串的清理,这里由于is不能识别空格或者回车,所以我们直接调用...基本成员函数 我们实现了获取字符串长度的 length 函数和返回 C 风格字符串的 c_str 函数。

    8010

    【C++ 程序设计入门基础】- Chapter One

    注意:使用静态类型的编程语言是在编译时执行类型检查,而不是在运行时执行类型检查。 2、标准库 标准的 C++ 由三个重要部分组成: 核心语言,提供了所有构件块,包括变量、数据类型和常量,等等。...<<endl; return 0;//返回0 } 注意:程序末尾返回0; 三、输入输出、格式 1、概述 标准输入输出流的对象和操作方法都是由 istream 和 ostream 两个类提供的,这两个类继承自...C++ 在进行输入时需要从流中提取数据,在输出时需要向流中插入数据,提取和插入是通过在流类库中重载 “>>” 和 “运算符来实现的。...“>>” 结合使用; cout、cerr 与 clog 与插入运算符 “C++ 中所有的输入输出操作。...<< f << endl; //输出float类型的变量 在用 cout 输出变量值时,不必设置以什么格式输出,“运算符会根据变量的数据类型自动调用相匹配的重载函数,而正确输出。

    1K20

    今天你学C++了吗?——string(下)

    如果 str2 不是 str1 的子串,则返回 nullptr~ 有了这个库函数,我们实现就十分方便~ //find字符串 size_t my_string::find(const char* s, size_t...若在比较过程中遇到字符串结束符'\0',则停止比较。此时,若一个字符串已结束而另一个字符串还未结束,则认为未结束的字符串大于已结束的字符串。 ==、!...(*this < s); } 当然,代码复用有很多种方式,选择自己喜欢的就好了~ 测试: 再看流插入/流提取运算符重载 流插入运算符(<<): 定义:将一个对象或数据插入到输出流中,如cout...前面我们重载的流插入运算符重载,是为了我们方便观察,而不使用监视进行观察,接下来我们来实现真正的模拟string类里面的流插入/流提取运算符~ 流插入运算符(<<) 我们先来看看库里面的<<实现连续输入的效果..._str; return out; } 流提取运算符(>>) 接下来,我们来看看流提取运算符,首先看看库里面的效果~ 我们不难发现,默认空格就是分隔符,所以我们输入两个字符串也就分别在s3、s4中~

    3600

    【C++】深度解析:用 C++ 模拟实现 string 类,探索其底层实现细节

    注意,这个类独立于所使用的编码来处理字节 : 如果用来处理多字节或变长字符 ( 如 UTF-8) 的序列,这个类的所有成员( 如长度或大小 ) 以及它的迭代器,将仍然按照字节 ( 而不是实际编码的字符...void swap(string& x, string& y) { x.swap(y); } ✨ 流插入和流提取 //重载成全局是为了调整顺序 //流插入 ostream& operator...//C++ 流插入,流提取可以支持自定义类型使用 istream& operator>>(istream& in, string& s) { s.clear(); char ch;...对于流提取,如果频繁的尾插,会造成频繁扩容。而且C++的扩容和C语言的扩容不一样,C++使用new不能原地扩容,只能异地扩容,异地扩容就会导致新空间的开辟、数据的拷贝、旧空间释放。...另外由于C++的标准输入流默认把空格和换行当作分隔符,不读取,所以这里要用in.get()来接收字符。 ✨getline 基本上可以直接复用流提取的代码。

    14400

    【C++】————IO流

    :标准IO流 对于 cin:在C++中称为流提取,也就是在 IO流 中提取信息,比如说读文件、获取键盘的信息等 对于 cout:在C++中称为流插入,也就是在 IO流 中插入信息...,原因是 cout 在输出时是根据 string 的 size 来输出的,而 scanf 输入时并没有改变string 的 size,所以打印结果不是我们想要的,上面的 printf 如果输入的长度在合法的范围内...,使得文件流对象和磁盘文件之间建立联系 使用提取和插入运算符对文件进行读写操作,或使用成员函数进行读写 关闭文件 对于二进制的读写:读写简单,高效快捷,但是缺点是除了字符和字符串,其他的类型从内存中写到文件的时候都是乱码...>>运算符重载 将数据形象地以“流”的形式进行输入(用于文本文件) (8)....运算符重载 将数据形象地以“流”的形式进行输出(用于文本文件) 四、stringstream的简单介绍 在C语言中,如果想要将一个整形变量的数据转化为字符串格式,如何去做?

    8410

    C++IO流详解

    :标准IO流 对于 cin:在C++中称为流提取,也就是在 IO流 中提取信息,比如说读文件、获取键盘的信息等 对于 cout:在C++中称为流插入,也就是在 IO流 中插入信息...,原因是 cout 在输出时是根据 string 的 size 来输出的,而 scanf 输入时并没有改变string 的 size,所以打印结果不是我们想要的,上面的 printf 如果输入的长度在合法的范围内...出错只是在流的状态字state中对应位置位(置1),程序继续。 空格和回车都可以作为数据之间的分格符,所以多个数据可以在一行输入,也可以分行输入。..._day ; return out; } // C++ IO流,使用面向对象+运算符重载的方式 // 能更好的兼容自定义类型,流插入和流提取 int main() { // 自动识别类型的本质...,使得文件流对象和磁盘文件之间建立联系 使用提取和插入运算符对文件进行读写操作,或使用成员函数进行读写 关闭文件 ⚡️ 对于二进制的读写:读写简单,高效快捷,但是缺点是除了字符和字符串,其他的类型从内存中写到文件的时候都是乱码

    61530

    C++教程(凯格尔训练法教程)

    在C++中定义了string类,在Visual C++中定义了Cstring类。 字符串中每一个字符占用一个字节,再加上最后一个空字符。如: //字符串长度为8个字节,最后一位是'\0'。...istrstream 输入字符串类 ostrstream 输出字符串类 strstream 输入输出字符串流类 17.2 标准输入输出流 C++的输入/输出流库(iostream)中定义了4个标准流对象...输出流对象 插入endl-输出所有数据,插入换行符,清空缓冲区 \n-输出换行,不清空缓冲区 cout.put(参数) 输出单个字符(可以时字符也可以是ASII码) 格式化输出 iomanip 中定义的流操作算子...+ 编译器,typename 后面的字符串为一个类型名称,而不是成员函数或者成员变量 typedef typename T::LengthType LengthType; // LengthType...C++更趋向于使用迭代器而不是下标操作,因为标准库为每一种标准容器(如vector)定义了一种迭代器类型,而只用少数容器(如vector)支持下标操作访问容器元素。按照定义方式分为以下四种。

    2.9K20

    C++教程(最全)「建议收藏」

    在C++中定义了string类,在Visual C++中定义了Cstring类。 字符串中每一个字符占用一个字节,再加上最后一个空字符。如: //字符串长度为8个字节,最后一位是'\0'。...istrstream 输入字符串类 ostrstream 输出字符串类 strstream 输入输出字符串流类 17.2 标准输入输出流 C++的输入/输出流库(iostream)中定义了4个标准流对象...输出流对象 插入endl-输出所有数据,插入换行符,清空缓冲区 \n-输出换行,不清空缓冲区 cout.put(参数) 输出单个字符(可以时字符也可以是ASII码) 格式化输出 iomanip 中定义的流操作算子...+ 编译器,typename 后面的字符串为一个类型名称,而不是成员函数或者成员变量 typedef typename T::LengthType LengthType; // LengthType...C++更趋向于使用迭代器而不是下标操作,因为标准库为每一种标准容器(如vector)定义了一种迭代器类型,而只用少数容器(如vector)支持下标操作访问容器元素。按照定义方式分为以下四种。

    2.5K30

    C++字符串流stringstream与string知识介绍与用法小结

    第3个位置查起,找到子串后,返回子串的位置;而substr函数从pos位置(子串开始的位置)开始,截取5个字符,赋值给str2,也就是说,str2的内容将是ssdfs。...与文件流fstream类似,通过插入器(>)这两个运算符可以直接对stringstream上的数据输入输出,而将stringstream中的全部数据输出则是使用成员函数str(),其有两种形式...; std::cout << ss.str() << std::endl; // 对stringstream而言,operator字符串流中写字符 // 而不是覆盖之前输入的字符,这一点不同于...ss.setstate(std::ios::eofbit);//设置流的状态标志位 std::cout 流的状态标志位 // 结果为...C++字符串中,它们之间的媒介是缓冲区streambuf,可由流的成员函数rdbuf()读取。

    5.3K30

    十二、IO流

    灵活性:C++的IO流库非常灵活,它支持链式操作、插入器和提取器(inserters and extractors),以及自定义类型的流插入和提取。...打开文件 在使用文件流之前,必须先使用其成员函数open()打开文件。如果文件成功打开,open()函数将返回void;如果失败,则可以通过检查流的状态来确定。...字符串流 在C++中,字符串流提供了一种将输入/输出操作与字符串关联起来的方式,而不是直接与文件或其他物理设备关联。...它提供了与std::istream相似的接口,但数据来源于一个初始化的字符串,而不是文件或其他输入源。...它提供了与std::ostream相似的接口,但数据被写入到一个内部的字符串对象中,而不是文件或其他输出设备。

    6410

    【C++】模拟实现string类

    operator +=重载函数,一个用于追加字符,一个用来追加字符串.需要注意的是,+=运算符的返回值是+=后的结果类对象,所以+=运算符重载函数的返回值是字符串引用类型,即string&....类中详细分析过对自定义类如何重载流插入和流提取函数,如下: 对于string类的流插入函数,我们只需要将string类对象中的字符逐一插入到ostream(流插入)对象中即可,然后因为流插入运算符是有返回值的...,因此我们将流插入对象作为返回值返回....,就是我们对输入的数据是未知的,即不知道它的内容,也不知道它有多长,所以稳妥的方法就是我们一个字符一个字符从流中提取内容,然后按照我们正常的扩容逻辑,可能如果插入128个字符就要扩容7次,而扩容又每次都要拷贝转移数据到新开辟的空间...流提取这里相比于流插入逻辑复杂一些,有很多细节需要我们注意,见代码注释: istream& operator>>(istream& in, string& s) { //因为我们要实现每次流提取的内容都对之前的内容是覆盖过的

    22010
    领券