来自公众号:小林coding
— 1 —
<< 运算符的重载
C++ 在输出内容时,最常用的方式:std::cout << 1 <<"hello";
提出问题:
那这条语句为什么能成立呢?
cout 是什么?为什么 << 运算符能用在 cout 上呢?
原因:
实际上,cout 是在 iostream 头文件中定义的 ostream 类的对象。
<< 能够用在 cout 上是因为,在 ostream 类对 << 进行了重载。
对于如下这条语句:
std::cout << 1 <<"hello";
有可能按以下的方式重载成 ostream 类的成员函数:
ostream & ostream::operator<int n){ .... // 输出n整型的代码 return *this;}ostream & ostream::operator<const { .... // 输出s字符串的代码 return *this;}
那么在使用流插入<
01 数据类型是int类型时:
std::cout << 1;
上面的语句,等价于:
cout.operator<1);
02 数据类型是字符串类型时:
std::cout << "hello";
上面的语句,等价于:
cout.operator<"hello");
03 数据类型组合使用时:
std::cout << 1 <<"hello";
上面的语句,等价于:
( cout.operator<1) ).operator<"hello");
— —
假定我们要想把某个对象里的内容进行打印输出,那么我们可以重载 ostream 类的流插入 << 运算符。
下面以 CStudent 类作为例子:
输出结果:
1,20,小林coding
需要注意:
ostream & operator<const CStudent & s)
函数是全局的,所以函数的第一个参数必须要传入 ostream 的对象,并且 CStudent 类需要将此函数声明成友元函数,使得函数可以访问 CStudent 类的私有成员变量。
— 2 —
>> 运算符的重载
还是以 CStudent 类作为例子,假设想通过键盘的输入的内容,来初始化对象,则我们可以重载 istream 类的流提取 >> 运算符。
输入内容和输出内容:
// 输入内容:1,20,小林coding// 输出内容:1,20,小林coding
— 3 —
小结
要想流插入 << 运算符和流提取 >> 运算符能针对自定义的对象,那么我们就需要重载针对该对象的 ostream 类的 << 运算符 和 istream 的 >> 运算符,并且只能重载成全局的函数。 然后在 CStudent 类里需要把上面的两个重载函数声明成友元函数,使得两个重载的函数可以访问和赋值 CStudent 类里的私有成员函数。●输入m获取文章目录
C语言与C++编程分享C/C++技术文章