操作符重载 – 上 --- C++标准库、操作符重载、友元

来源:互联网 发布:php 正规表达式 编辑:程序博客网 时间:2024/04/29 07:56

使用C++标准库

C++标准库并 不是 C++语言的一部分。
C++标准库是由C++语言编写而成的类库和函数的集合
C++标准库中定义的类和对象都位于std命名空间中。
需要使用 using namespace std;

C++标准库的头文件都不带.h后缀。
C++标准库涵盖了C库的功能,C库中 < name.h > 头文件对应C++中的 < cname >
例如 #include < stdio.h > 对应 #include < cstdio >

C++标准库中的输入与输出: cin 和 cout
要用到:

#include <iostream>using namespace std;

使用举例:
这里写图片描述

C++中的操作符重载可以改变左移和右移运算符的语义,因此可以采用<<和>>操作符来实现对数据的输出和输入。

操作符重载

操作符重载为操作符提供不同的语义。

C++中操作符重载的本质:
C++中通过operator关键字可以利用函数扩展操作符。
operator的本质是通过函数重载实现操作符重载

用法举例:
这里写图片描述
上面程序中的Complex是一个结构体。

重载的操作符在使用时如 c1 + c2 ,本质上是调用了一个重载函数

但是,在上面的函数中,不能访问类中的private成员变量,因此应当采用友元的方式,赋予上面的重载函数调用private成员变量的权限。

C++中的类的友元

private声明使得类的成员不能被外界访问。
但是通过friend关键字可以例外的开放权限

使用举例:
这里写图片描述
上面程序中,重载函数可以直接通过对象名来访问对象中的private成员变量。

需要注意的是:使用友元定义的函数,他不是成员函数,在上面的例子中,+号重载函数是全局函数,不是类的成员函数。只是在这个全局函数中,直接通过类对象就可以访问私有成员。

左移操作符重载:

friend ostream& operator<< (ostream& out, const Complex& c);ostream& operator<< (ostream& out, const Complex& c){    out<<c.a<<" + "<<c.b<<"i";      return out;//此处必须要返回,这样才能实现一次<<输出之后继续<<接着输出,如cout<<a<<endl}//ostream是cout显示的类型

小结

操作符重载是C++的强大特性之一。
操作符重载的本质是通过函数扩展操作符的语义。
operator关键字是操作符重载的关键。
friend关键字可以对函数或类开放访问权限。
操作符重载遵循函数重载的规则。

0 0