优秀的编程知识分享平台

网站首页 > 技术文章 正文

C++运算符举例(c++中:运算符)

nanyue 2024-07-26 15:37:47 技术文章 11 ℃

一:双目运算符

对于双目运算符B,有 oprd1 B oprd2,其中oprd1为A类的对象,则应把B重载为A类的成员函数,该函数只有一个形参,形参的类型是oprd2所属的类型。重载以后oprd1 B oprd2相当于oprd1.opreatorB(oprd2);

例子:

#include <iostream>

using namespace std;

class Complex{

public:

Complex(double r=0.0,double i=0.0):real(r),imag(i){}

Complex operator+(const Complex &c2) const;

Complex operator-(const Complex &c2) const;

void display()const;

private:

double real;

double imag;

};

Complex Complex::operator+(const Complex &c2)const { //重载函数的实现

return Complex(real+c2.real,imag+c2.imag); //创建一个临时无名对象作为返回值

}

Complex Complex::operator-(const Complex &c2)const {

return Complex(real-c2.real,imag-c2.imag);

}

void Complex::display()const{

cout<<"("<<real<<","<<imag<<")"<<endl;

}

int main()

{

Complex c1(5,4),c2(2,10),c3;

cout<<"c1=";c1.display();

cout<<"c2=";c2.display();

c3=c1-c2;

cout<<"c3=c1-c2=";c3.display();

c3=c1+c2;

cout<<"c3=c1+c2=";c3.display();

return 0;

}

/*运行结果

* c1=(5,4)

* c2=(2,10)

* c3=c1-c2=(3,-6)

* c3=c1+c2=(7,14) */

二:单目运算符

  1. 对于前置单目运算符U,如“-”( 负号)等,若是要重载为类的成员函数,用来实现表达式 U oprd 其中oprd为A类的对象,则U应当重载为A类的成员函数,函数没有形参。经过重载以后,表达式U oprd相当与函数调用oprd.operator U();
  2. 对于后置运算符“++”,“--”,若是要将他们重载为类的成员函数,用来实现表达式oprd++或oprd--,其中oprd为A类的对象,那么当运算符重载为A类的成员函数时要带有一个整形(int)形参。重载后表达式oprd++和oprd--jiu相当于函数调用oprd.operator++(0)和oprd.operator--(0)这里的int类型参数在运算中起不了任何作用,知识用于区别后置++,--与前置++,--。

例子:

#include <iostream>

using namespace std;

class Clock{

public:

Clock(int hour=0,int minute=0,int second=0);

void showTime()const;

Clock& operator++();

Clock operator++(int);

private:

int hour,minute,second;

};

Clock::Clock(int hour, int minute, int second){

if(0<=hour && hour<24 &&0<=minute &&minute<60&&0<=second && second<60){

this->hour=hour;

this->minute=minute;

this->second=second;

}else

cout<<"Time error!"<<endl;

}

void Clock::showTime()const{ //显示时间函数

cout<<hour<<":"<<minute<<":"<<second<<endl;

}

Clock & Clock::operator ++(){ //前置单目运算符重载函数

second++;

if(second>=60){

second-=60;

minute++;

if(minute>=60){

minute-=60;

hour=(hour+1)%24;

}

}

return *this;

}

Clock Clock::operator ++(int){ //后置单目运算符重载

Clock old=*this;

++(*this); //调用前置++运算符

return old;

}

int main()

{

Clock myClock(23,59,59);

cout<<"First time output: ";

myClock.showTime();

cout<<"Show myClock++: ";

(myClock++).showTime();

cout<<"Show ++myClock: ";

(++myClock).showTime();

return 0;

}

/*运行结果

* First time output: 23:59:59

* show myClock++: 23:59:59

* show ++myClock: 0:0:1 */

Tags:

最近发表
标签列表