C++运算符的重载

运算符重载基本概念

运算符重载,就是对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数 据类型。
运算符重载(operator overloading)只是一种”语法上的方便”,也就是它只是另一 种函数调用的方式。
在 c++中,可以定义一个处理类的新运算符。这种定义很像一个普通的函数定义,只 是函数的名字由关键字 operator 及其紧跟的运算符组成。差别仅此而已。它像任何其他函 数一样也是一个函数,当编译器遇到适当的模式时,就会调用这个函数。
语法: 定义重载的运算符就像定义函数,只是该函数的名字是operator@,这里的@代表了被 重载的运算符。函数的参数中参数个数取决于两个因素。 运算符是一元(一个参数)的还是二元(两个参数); 运算符被定义为全局函数(对于一元是一个参数,对于二元是两个参数)还是成员函 数(对于一元没有参数,对于二元是一个参数-此时该类的对象用作左耳参数)
[两个极端] 有些人很容易滥用运算符重载。它确实是一个有趣的工具。但是应该注意,它仅仅是一 种语法上的方便而已,是另外一种函数调用的方式。从这个角度来看,只有在能使涉及类的 代码更易写,尤其是更易读时(请记住,读代码的机会比我们写代码多多了)才有理由重载运 算符。如果不是这样,就改用其他更易用,更易读的方式。 对于运算符重载,另外一个常见的反应是恐慌:突然之间,C 运算符的含义变得不同寻 常了,一切都变了,所有 C 代码的功能都要改变!并非如此,对于内置的数据类型的表示 总的所有运算符是不可能改变的。

运算符重载碰上友元函数

友元函数是一个全局函数,和我们上例写的全局函数类似,只是友元函数可以访问某个 类私有数据
案例: 重载左移操作符(<<),使得 cout 可以输出对象。

// An highlighted block
class Person
{
 friend ostream& operator<<(ostream& os, Person& person); 
 public: 
 Person(int id,int age)
 {
  mID = id; mAge = age;
 }
 private:
 int mID; 
 int mAge;
};
ostream& operator<<(ostream& os, Person& person)
{
    os << "ID:" << person.mID << " Age:" << person.mAge;
     return os;
}
int main()
{
       Person person(1001, 30); //cout << person; //cout.operator+(person)
        cout << person << " | " << endl; return EXIT_SUCCESS;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值