流运算符的重载

1.cout 是在iostream 中定义的,是ostream的对象

ostream& ostream::operator<<(int n)
{
    //
    return *this;
}
ostream& ostream::operator<<(const char* s)
{
    //
    return *this;
}

2.类似Java中重写String方法一样,C++中一般重载“<<”运算符,一般为重载为全局函数

Because:

对输出运算符的重载

 void operator<<(ostream& out) {    out << _year << "-" << _month << "-" << _day << endl; 

会出现一个问题,只能写成

d<<cout      //打印d中的年月日

因为函数的第一个参数是this指针,第二个参数才是我们传进去的 out,但是这与std中的cout使用习惯完全不符,我们的所打印变量是应该在cout的右边,如

  cout<<d<<endl

这样的重载和普通的函数没有两样,也就失去了重载函数的目的所在。

那么这样,我们便不可以把输出运算符的重载写成成员函数,写成成员函数去实现功能,能实现功能 但失去重载本身的意义。

那么我们在类外写重载函数,此时输出运算符的重载函数是一个全局的。

 3.例子

#include <iostream>
#include <string>
#include <iomanip>
#include <cstdlib>

using namespace std;

class Complex
{
private:
    double real;
    double imag;
public:
    Complex(double r=0.0,double i=0.0):real(r),imag(i){}
    friend ostream& operator<<(ostream & os,const Complex& c);
    friend istream& operator>>(istream & is,const Complex& c);//起到声明friend作用,为全局函数做准备
};

ostream& operator<<(ostream& os,const Complex& c)
{
    os<<c.real<<'+'<<c.imag<<'i';
    return os;
}

iostream& operator>>(iostream& is,const Complex& c)
{
    string s;
    is>>s;
    int pos=s.find("+",0);
    string sTmp=s.substr(0,pos);
    c.real=atof(sTmp.c_str());
    sTmp=s.substr(pos+1,s.length()-pos-2);
    c.imag=atof(sTmp.c_str());
    return is;
}

 

转载于:https://www.cnblogs.com/-Asurada-/p/10674249.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
输入输出运算符重载C++中的一种特性,它允许我们自定义类对象在输入输出中的行为。通过重载输入输出运算符,我们可以实现自定义的对象输入输出格式。 在C++中,输入输出运算符重载使用友元函数来实现。常用的输入输出运算符包括插入运算符(<<)和提取运算符(>>)。 对于输出运算符(<<),我们可以通过重载运算符来定义对象在输出中的输出格式。例如,我们可以重载运算符来输出对象的成员变量值。 对于输入运算符(>>),我们可以通过重载运算符来定义对象在输入中的输入格式。例如,我们可以重载运算符来接收用户输入,并将输入的值赋给对象的成员变量。 下面是一个示例代码,演示了如何重载输入输出运算符: ```cpp #include <iostream> class MyClass { private: int value; public: MyClass(int v) : value(v) {} // 重载插入运算符(<<) friend std::ostream& operator<<(std::ostream& os, const MyClass& obj) { os << "Value: " << obj.value; return os; } // 重载提取运算符(>>) friend std::istream& operator>>(std::istream& is, MyClass& obj) { is >> obj.value; return is; } }; int main() { MyClass obj(0); std::cout << "请输入一个整数: "; std::cin >> obj; std::cout << "输入的值为: " << obj << std::endl; return 0; } ``` 在上述示例中,我们定义了一个名为MyClass的类,其中包含一个私有成员变量value。通过重载插入运算符(<<)和提取运算符(>>),我们可以自定义MyClass对象在输入输出中的行为。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值