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

为什么不会cout <<使用重载*运算符?

在C++中,cout 是一个对象,它代表标准输出流。<< 是一个重载的运算符,它用于将数据插入到输出流中。在这个问题中,我们要讨论为什么不会使用重载的 * 运算符来操作 cout 对象。

首先,* 运算符在C++中通常用于指针操作。当我们使用指针时,我们需要解引用指针来访问它所指向的内存地址上的值。然而,cout 是一个对象,而不是指针,因此不需要使用 * 运算符进行解引用。

其次,cout 对象已经重载了 << 运算符,使我们能够将数据插入到输出流中。这意味着我们可以使用 << 运算符将数据发送到 cout,而无需使用 * 运算符。

最后,在C++中,重载运算符(如 <<*)的使用应根据其语义来确定。对于 cout 对象,使用 << 运算符是适当的,因为它用于将数据插入到输出流中。使用 * 运算符可能会导致混淆和错误,因为它与指针操作密切相关,而 cout 不是指针。

因此,不会使用重载的 * 运算符来操作 cout 对象,因为它不是指针,而且在C++中,使用 << 运算符是将数据插入到输出流的标准方法。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【C++】运算符重载 ⑦ ( 一元运算符重载 | 后置运算符重载 | 使用 全局函数 实现 后置 ++ 自增运算符重载 | 使用 成员函数 实现 后置 -- 自减运算符重载 )

++(Student& s, int) , 返回的事对象值 , 参数列表最后一位需要添加 int 类型的占位参数 ; 由此可见 , 后置运算符重载的难度高于前置运算符 ; 一、后置运算符重载 1、使用...全局函数 实现 后置 ++ 自增运算符重载 使用 全局函数 实现 后置 ++ 自增运算符重载 : 首先 , 写出函数名 , 函数名规则为 " operate " 后面跟上要重载运算符 , 函数名是 operate...; // 使用 全局函数 实现 后置 ++ 自增运算符重载 // 重载 后置 ++ 运算符 // 实现 1 个 Student 对象 自增运算 // 先使用 参数中的 Student& s 对象 ,...成员函数 实现 后置 – 自减运算符重载 使用 成员函数 实现 后置 – 自减运算符重载 : 首先 , 写出函数名 , 函数名规则为 " operate " 后面跟上要重载运算符 , 函数名是 operate...public: // 使用 成员函数 实现 后置 -- 自减运算符重载 // 重载 后置 -- 运算符 // 实现 1 个 Student 对象 自减运算 // 先使用 this 指针指向的对象

19140

【C++】运算符重载案例 - 字符串类 ⑤ ( 重载 大于 > 运算符 | 重载 小于 < 运算符 | 重载 右移 >> 运算符 - 使用全局函数重载 | 代码示例 )

一、重载 大于号 / 小于号 运算符 - 使用成员函数重载 1、重载 大于 > 运算符 使用 成员函数 实现 等于判断 == 运算符重载 : 首先 , 写出函数名 , 函数名规则为 " operate..." 后面跟上要重载运算符 , 要对 String a , b 对象对比操作 , 使用 大于 > 运算符 , 使用时用法为 a > b ; 函数名是 operate> ; operate> 然后...使用 成员函数 实现 小于 < 运算符重载 : 首先 , 写出函数名 , 函数名规则为 " operate " 后面跟上要重载运算符 , 要对 String a , b 对象对比操作 , 使用...- 使用全局函数重载 ---- 左移 << 操作符 cout << s << endl , 是将 s 对象输出到 cout 标准输出流中 ; 右移 >> 操作符 cin << s , 是将 标准输入流...char c = s3[3]; // 调用 重载的 左移运算符 函数 cout << s3 << endl; // 控制台暂停 , 按任意键继续向后执行 system("pause");

50620
  • 【C++】运算符重载 ④ ( 一元运算符重载 | 使用 全局函数 实现 前置 ++ 自增运算符重载 | 使用 全局函数 实现 前置 - - 自减运算符重载 )

    实现 前置 ++ 自增运算符重载 使用 全局函数 实现 前置 ++ 自增运算符重载 : 首先 , 写出函数名 , 函数名规则为 " operate " 后面跟上要重载运算符 , 函数名是 operate...; // 使用 全局函数 实现 前置 ++ 自增运算符重载 // 重载 前置 ++ 运算符 // 实现 1 个 Student 对象 自增运算 // 由于 参数中的 Student& s 中的属性发生了变化...全局函数 实现 前置 ++ 自增运算符重载 friend Student& operator++(Student& s); 4、使用 全局函数 实现 前置 - - 自减运算符重载 使用 全局函数 实现...; // 使用 全局函数 实现 前置 -- 自减运算符重载 // 重载 前置 -- 运算符 // 实现 1 个 Student 对象 自减运算 // 由于 参数中的 Student& s 中的属性发生了变化...->height - s.height); return student; }; private: // 友元函数 实现 全局函数 运算符重载 // 使用 全局函数 实现 + 运算符重载

    18820

    【C++】运算符重载 ⑤ ( 一元运算符重载 | 使用 成员函数 实现 前置 ++ 自增运算符重载 | 使用 成员函数 实现 前置 - - 自减运算符重载 )

    一、一元运算符重载 1、使用 成员函数 实现 前置 ++ 自增运算符重载 使用 全局函数 实现 前置 ++ 自增运算符重载 : 首先 , 写出函数名 , 函数名规则为 " operate " 后面跟上要重载运算符...; // 使用 成员函数 实现 前置 ++ 自增运算符重载 // 重载 前置 ++ 运算符 // 实现 1 个 Student 对象 自增运算 // 由于 参数中的 Student& s 中的属性发生了变化...成员函数 实现 前置 - - 自减运算符重载 使用 全局函数 实现 前置 - - 自减运算符重载 : 首先 , 写出函数名 , 函数名规则为 " operate " 后面跟上要重载运算符 , 函数名是...; // 使用 成员函数 实现 前置 -- 自减运算符重载 // 重载 前置 -- 运算符 // 实现 1 个 Student 对象 自增运算 // 由于 参数中的 Student& s 中的属性发生了变化...<< "age = " << age << " , height = " << height << endl; }; public: // <em>使用</em> 成员函数 实现 前置 ++ 自增<em>运算符</em><em>重载</em> /

    18140

    【C++】运算符重载 ⑧ ( 左移运算符重载 | 友元函数 成员函数 实现运算符重载 | 类对象 使用 左移运算符 )

    一、左移运算符重载 1、友元函数 / 成员函数 实现运算符重载 运算符重载 的正规写法一般都是 使用 成员函数 的形式 实现的 ; 加法 + , 减法 - , 自增 ++ , 自减 - - , 一般都使用成员函数...实现 运算符重载 ; 上述 运算符重载 既可以使用 成员函数 进行重载 , 又可以使用友元函数进行重载 ; 只能使用 成员函数 重载运算符 : = , [] , () , -> 等操作符 只能使用...成员函数 进行重载 ; 只能使用 友元函数 重载运算符 : 无法修改 左操作数 的情况下 , 只能使用 全局函数 ( 需声明 友元函数 ) 进行重载 ; 2、类对象 使用 左移运算符 平时使用 cout...: error C2679: 二进制“<<”: 没有找到接受“Student”类型的右操作数的运算符(或没有可接受的转换) 如果想要使用 cout << s1 << endl; 用法输出对象到日志中..., 需要重载 左移操作符 ; 3、左移运算符 << 重载 使用 全局函数 实现 左移运算符 << 重载 : 首先 , 写出函数名 , cout << s1 左移操作符重载 , 函数名规则为 " operate

    25910

    【C++】运算符重载 ⑨ ( 等号 = 运算符重载 | 调用默认浅拷贝构造函数的情况分析 | 等号 = 运算符重载 与 拷贝构造函数 各自使用场景 | 等号 = 操作符重载步骤 )

    博客总结 : 使用 成员函数 进行 等号运算符重载 函数原型如下 : Student& operator=(Student& s) 使用 已存在的对象 A 对 另外一个已存在对象 B 赋值 , B =..., 如 Student s2 = s; 代码 , 就会自动调用 深拷贝构造函数 ; 2、等号 = 运算符重载 与 拷贝构造函数 各自使用场景 等号 = 运算符重载 与 拷贝构造函数 各自使用场景 :...拷贝构造函数 : 如果 使用对象 为一个 新对象 进行初始化 , 调用的是拷贝构造函数 ; 等号 = 运算符重载 : 如果 使用对象 为一个已存在的对象 重新进行赋值 , 调用的是 等号运算符重载运算符方法...; 3、= 操作符重载步骤 使用 成员函数 实现 等号 = 运算符重载 : 首先 , 写出函数名 , Student s2 = s; 等号 = 运算符重载 , 函数名规则为 " operate " 后面跟上要重载运算符...等号 = 运算符 Student& operator=(Student& s) { cout << "调用 Student 重载 等号 = 运算符" << endl; // 释放旧内存,

    24720

    C++基础——C++面向对象之重载与多态基础总结(函数重载运算符重载、多态的使用

    1 重载         C++ 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载运算符重载。...当调用一个重载函数或重载运算符时,编译器通过把所使用的参数类型与定义中的参数类型对比,决定选用最合适的定义。选择最合适的重载函数或重载运算符的过程,称为重载决策。...要重载运算符,需要使用被称为运算符函数的特殊函数形式, 重载运算符的格式如下: operator () { } 可重载运算符列表: 不可重载运算符列表...下面举个例子,对象作为参数进行传递,对象的属性使用 this 运算符进行访问。..., 把People对象作为传递, 使用this 运算符进行访问,然后返回一个 People对象。

    74810

    《挑战30天C++入门极限》C++运算符重载函数基础及其值返回状态

    在这里要提醒读者的是,自定义类的运算符重载函数也是函数,你重载的一切运算符不会因为是你自己定义的就改变其运算的优先级,自定义运算符的运算优先级同样遵循与内部运算符一样的顺序。   ...下面我们来学习如何重载运算符运算符重载函数的形式是: 返回类型 operator 运算符符号 (参数说明) { //函数体的内部实现 }   运算符重载函数的使用主要分为两种形式,一种是作为类的友元函数进行使用...,所以在使用重载运算符脱离原意之前,必须保证有足够的理由。   ...,临时变量与局部变量result的复制会调用拷贝构造函数,临时变量的生命周期是在拷贝构造函数运行完成后才结束,但如果运算符重载函数返回的是引用,那么不会产生临时变量,而局部变量result的生命周期在运算符重载函数退出后立即消失...这是为什么呢?

    51020

    关于C++中操作符重载的疑问 :四个运算符=, ->, [], ()不可以重载为全局函数(友员函数)

    C++规定有四个运算符 =, ->, [], ()不可以是全局域中的重载(即不能重载为友员函数),这是为什么呢?...那么为什么赋值运算符不可以重载为类的友元函数?像同样都是双目运算符的+为什么它就可以呢?...,执行赋值语句a = 7;程序会去调用类A中相应的赋值运算符重载函数,而不会像上面原来那样去调用有参构造函数。...而当类中有定义赋值运算符重载成员函数,执行赋值语句时,程序就只会去调用相应的赋值运算符重载函数。  当明白上面的规则后,现在就可以回过来,讨论为什么赋值运算符不可以重载为类的友元函数了。...像类A里有成员函数f(),当 复制代码 代码如下: A a; A* p = &a;  p->f();   //虽然类A中没有自己定义运算符->重载成员函数,但这里仍可这样使用 然而,当我们把->运算符重载为类

    1K20

    适合具备 C 语言基础的 C++ 教程(四)

    ,这样就不会创建临时的变量,同时也就不会在调用构造函数和析构函数,改动之后的代码如下所示: Point& operator++(Point &p) { cout<<"++p"<<endl;...紧接着,我们知道我们在使用 C++进行编码的时候,基本不会再采用 C语言中的语法 printf这个语句,随之替代的是 cout这个语句,我们也知道我们使用 cout进行输出的时候,往往采用的是下面这样的输出方式...o; } 稍微对上述代码进行一下解释, 这里为什么返回值是ostream&呢,是因为对于 cout来说,它是ostream类的实例化对象,在使用 cout进行输出的时候,它所遵循的一个输出格式是 cout...类内实现运算符重载函数 在上述代码中我们实现的 +运算符重载函数以及前 ++运算符重载函数和后++运算符重载函数,都是在类外实现的,那么如果要在类内实现以上几个运算符重载函数,应该如何写呢,我们先回顾一下...首先,如果是在类里面实现,那么当前使用这个类进行实例化的对象本身就可以使用 *this来表征一个对象,这个时候,如果要重载 +运算符函数,那么就只需要一个Point类的形参就行,代码如下所示: class

    45420

    适合具备 C 语言基础的 C++ 入门教程(四)

    ,这样就不会创建临时的变量,同时也就不会在调用构造函数和析构函数,改动之后的代码如下所示: Point& operator++(Point &p) { cout<<"++p"<<endl; p.x...紧接着,我们知道我们在使用 C++进行编码的时候,基本不会再采用 C语言中的语法 printf这个语句,随之替代的是 cout这个语句,我们也知道我们使用 cout进行输出的时候,往往采用的是下面这样的输出方式...稍微对上述代码进行一下解释, 这里为什么返回值是ostream&呢,是因为对于 cout来说,它是ostream类的实例化对象,在使用 cout进行输出的时候,它所遵循的一个输出格式是 cout <<,...类内实现运算符重载函数 在上述代码中我们实现的 +运算符重载函数以及前 ++运算符重载函数和后++运算符重载函数,都是在类外实现的,那么如果要在类内实现以上几个运算符重载函数,应该如何写呢,我们先回顾一下...首先,如果是在类里面实现,那么当前使用这个类进行实例化的对象本身就可以使用 *this来表征一个对象,这个时候,如果要重载 +运算符函数,那么就只需要一个Point类的形参就行,代码如下所示: class

    28530

    【C++修行之道】类和对象(五)日期类的实现、const成员、取地址及const和取地址操作符重载

    "-" << _month << "-" << _day << "\n"; } 1.3 实现日期类的逻辑运算符重载 只需实现两个运算符,就能借助这两个运算符去简易的实现其他运算符。...d.CheckDate()) { cout << "日期非法" << endl; } // 返回输入流的引用,以便支持链式调用 return in; } 为什么参数顺序为(ostream...改变参数顺序后,编译器不会再将其识别为流插入运算符,导致无法正常使用链式调用等特性。...将 operator<< 的参数顺序反过来会导致函数不能正常作为流插入运算符使用,破坏标准库的调用方式和使用习惯。...<< &aa1 << endl; cout << &aa2 << endl; return 0; } 这两个运算符一般不需要重载使用编译器生成的默认取地址的重载即可,只有特殊情况,才需 要重载

    9710

    《挑战30天C++入门极限》C++运算符重载转换运算符

    C++运算符重载转换运算符   为什么需要转换运算符?...大家知道对于内置类型的数据我们可以通过强制转换符的使用来转换数据,例如(int)2.1f;自定义类也是类型,那么自定义类的对象在很多情况下也需要支持此操作,C++提供了转换运算符重载函数,它使得自定义类对象的强转换成为可能...在很多情况下,类的强转换运算符还可以作为类对象加运算重载函数使用,尽管他们的意义并不相同,下面的例子,就是利用转换运算符,将两个类对象转换成int后,相加并创建临时类对象,后再赋给另一个对象。   ...是会按照Test b(99);来处理的,可是由于转换运算符的加入,导致这一规律被破坏,系统会“错误的”认为你是要给对象赋值,所以系统首先利用Test(99)创建一个临时对象用于赋值过程使用,可是恰恰系统又没有使用自动提供的赋值运算重载函数去处理...运行结果如下图所示(运行过程的解释见图):   由于类的转换运算符与类的运算符重载函数,在某些地方上使用的时候,有功能相似的地方,如果两者都存在于类中,那么虽然运行结果正确,但其运行过程会出现一些意向不到的步骤

    45820

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

    — 1 — << 运算符重载 C++ 在输出内容时,最常用的方式: std::cout << 1 <<"hello"; 提出问题: 那这条语句为什么能成立呢? cout 是什么?...为什么 << 运算符能用在 cout 上呢? 原因: 实际上,cout 是在 iostream 头文件中定义的 ostream 类的对象。...:cout << "hello"; 上面的语句,等价于: cout.operator<<("hello"); 03 数据类型组合使用时: std::cout << 1 <<"hello"; 上面的语句,...---- — 2 — >> 运算符重载 还是以 CStudent 类作为例子,假设想通过键盘的输入的内容,来初始化对象,则我们可以重载 istream 类的流提取 >> 运算符。 ?...,那么我们就需要重载针对该对象的 ostream 类的 > 运算符,并且只能重载成全局的函数。

    1.1K10

    C++初阶类与对象(三):详解复制构造函数和运算符重载

    没效果但是不会报错)。...拷贝构造函数的参数只有一个且必须是类类型对象的引用(&),使用传值方式编译器直接报错,因为会引发无穷递归调用 为什么会无限递归:当我们传值调用函数时,首先传参–>因为是传值会调用新的一个拷贝构造–>...不会这样干 使用友元函数 友元函数后面会给大家详解,在这里先下结论:能不使用友元函数就不使用 放在类里面 我们选择直接重载成成员函数 2.3运算符重载示例 我们就先使用大家最为熟悉的日期类作为演示...<< ret1 << endl; cout << ret2 << endl; return 0; } 2.3.2赋值运算符重载 赋值运算符重载格式 参数类型:const T&,传递引用可以提高传参效率...0; } 为什么没有声明cout是ostream类的对象,甚至声明后还会报错???

    18510

    【C++篇】C++类和对象实践篇——从零带你实现日期类的超详细指南

    4.1.2 重载 + 运算符 为了方便不修改原始日期对象的情况下进行日期加法,我们可以重载 + 运算符。+ 运算符不会改变原始对象,而是返回一个新的日期对象。...4.2.2 重载 - 运算符 与加法类似,- 运算符不会修改原始日期对象,而是返回一个新的日期对象,通过调用 -= 实现。...为了实现 Date 类的输出重载,我们可以将其声明为友元函数,使得它能够访问 Date 类的私有成员变量。 思考: 为什么我们推荐使用友元函数来重载流插入与流提取运算符?...5.4 为什么推荐 << 运算符重载为友元函数? 为什么 << 运算符重载时更推荐友元函数呢?接下来,我们逐步分析三种实现方式的差异,并解释友元函数的优势。...5.4.3为什么不推荐使用getter 函数的方式来实现 << 运算符重载

    8210

    C++ 自增、自减运算符重载和性能分析

    为了区分所重载的是「前置」运算符还是「后置」运算符,C++规定: 「前置」运算符作为一元运算符重载重载为成员函数的形式如下: // 前置自增运算符重载函数,函数参数是空 T & operator+...那么问题来了: 为什么「前置」运算符返回的是引用 & ? 为什么「后置」运算符返回的是普通的对象(临时对象)? 主要是因为为了保持原本 C++ 前置和后置运算符的特性。...---- — 3 — 重载函数的编写 在自己的定义的类,实现对象自增、自减功能,如下具体的使用: int main() { CDemo d(10); cout << d++ << ","...<< d << ","; cout << d-- << ","; // 等价于 d.operator--(0); cout << d << ","; cout << --d...重要是我们在对于对象和迭代器使用自增或自减时,最好用「前置」的运算符的方式,这样可以减少开销。

    1.1K20

    【C++】类和对象之常引用与运算符重载

    前言 在之前的文章中提到了常引用,再来看运算符重载之前,先来看看常引用的使用。 2....那么为什么要产生临时变量呢? 这里i和ch比较为什么会相等? 因为i和ch不能直接去比较,在操作符两边的操作数类型不一样时,会有类型提升或截断。...运算符重载 C++为了增强代码的可读性引入了运算符重载运算符重载是具有特殊函数名的函数,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。...为了避免这样就有了运算符重载。 函数名字为:关键字operator后面接需要重载运算符符号。 这里的重载是指对运算符的重新定义,按照用户的需求去控制。...注意以上5个运算符不能重载。这个经常在笔试选择题中出现。 有问题请指出,大家一起进步!!!

    12510

    【C++】类与对象篇三

    1 运算符重载 C++为了增强代码的可读性引入了运算符重载运算符重载是具有特殊函数名的函数 函数名字为:关键字operator后面接需要重载运算符符号。...此时用户再在类外自己实现一个全局的赋值运算符重载,就和编译器在类中生成的默认赋值运算符重载冲突了,故赋值运算符重载只能是类的成员函数。 3....++重载时多增加一个int类型的参数,但调用函数时该参数不用传递,编译器 自动传递 // 注意:后置++是先使用后+1,因此需要返回+1之前的旧值,故需在实现时需要先将this保存 一份,然后给this...,使用编译器生成的默认取地址的重载即可,只有特殊情况,才需要重载,比如想让别人获取到指定的内容!...最后补充: (1) . cout << 对于运算符 << 库里面通过函数重载的方式来达到自动识别内置类型的目的 (2) . cout << 本质: (3) . 权限问题:

    7310
    领券