C++语言基础 例程 重载单目运算符

贺老师的教学链接  本课讲解

示例1:分数类对象的相反数

class CFraction
{
private:
    int nume;  // 分子
    int deno;  // 分母
public:
    CFraction(int nu=0,int de=1):nume(nu),deno(de) {}
    CFraction operator-(const CFraction &c);  //两个分数相减,结果要化简
    CFraction operator-();  //取反一目运算
};

// 分数相减
CFraction CFraction:: operator-(const CFraction &c)
{
    CFraction t;
    t.nume=nume*c.deno-c.nume*deno;
    t.deno=deno*c.deno;
    t.simplify();
    return t;
}

// 分数取负号
CFraction CFraction:: operator-()
{
    CFraction x;
    x.nume=-nume;
    x.deno=deno;
    return x;
}

案例:Time类的++

#include <iostream>
using namespace std;
class Time
{
public:
    Time( )
    {
        minute=0;
        sec=0;
    }
    Time(int m,int s):minute(m),sec(s) { }
    Time operator++( );
    Time operator++(int);
    void display( )
    {
        cout<<minute<<":"<<sec<<endl;
    }
private:
    int minute;
    int sec;
};
Time Time::operator++( )
{
    if(++sec>=60)
    {
        sec-=60;
        ++minute;
    }
    return *this;
}

Time Time::operator++(int)
{
    Time temp(*this);
    sec++;
    if(sec>=60)
    {
        sec-=60;
        ++minute;
    }
    return temp;
}

int main( )
{
    Time time1(34,59),time2;
    cout<<" time1 : ";
    time1.display( );
    ++time1;
    cout<<"++time1: ";
    time1.display( );
    time2=time1++;          //将自加前的对象的值赋给time2
    cout<<"time1++: ";
    time1.display( );
    cout<<" time2 :";
    time2.display( );          //输出time2对象的值
    return 0;
}
时间: 2024-07-30 08:49:12

C++语言基础 例程 重载单目运算符的相关文章

C++语言基础 例程 重载流插入运算符和流提取运算符

贺老师的教学链接  本课讲解 重载流插入运算符"<<" #include <iostream> using namespace std; class Complex { public: Complex( ) { real=0; imag=0; } Complex(double r,double i) { real=r; imag=i; } Complex operator + (Complex &c2); //运算符"+"重载为成员函

C++语言基础 例程 重载双目运算符

贺老师的教学链接  本课讲解 String类运算符重载函数 #include<iostream> #include<cstring> using namespace std; class String { public: String( ){p=NULL;} String(char *str); friend bool operator>(String &s1, String &s2); friend bool operator<(String &

详解C++编程中的单目运算符重载与双目运算符重载_C 语言

C++单目运算符重载 单目运算符只有一个操作数,如!a,-b,&c,*p,还有最常用的++i和--i等.重载单目运算符的方法与重载双目运算符的方法是类似的.但由于单目运算符只有一个操作数,因此运算符重载函数只有一个参数,如果运算符重载函数作为成员函数,则还可省略此参数. 下面以自增运算符"++"为例,介绍单目运算符的重载. [例] 有一个Time类,包含数据成员minute(分)和sec(秒),模拟秒表,每次走一秒,满60秒进一分钟,此时秒又从0开始算.要求输出分和秒的值. #

《21天学通C++(第7版)》——12.2 单目运算符

12.2 单目运算符 21天学通C++(第7版) 顾名思义,单目运算符只对一个操作数进行操作.实现为全局函数或静态成员函数的单目运算符的典型定义如下: 作为类成员的单目运算符的定义如下: 12.2.1 单目运算符的类型 可重载(或重新定义)的单目运算符如表12.1所示. 表12.1 单目运算符 12.2.2 单目递增与单目递减运算符 要在类声明中编写单目前缀递增运算符(++),可采用如下语法: 而后缀递增运算符(++)的返回值不同,且有一个输入参数(但并非总是使用它): 前缀和后缀递减运算符的声

C++语言基础 例程 案例:Time类的设计

贺老师的教学链接  本课讲解 #include <iostream> using namespace std; class CTime { private: unsigned short int hour; // 时 unsigned short int minute; // 分 unsigned short int second; // 秒 public: CTime(int h=0,int m=0,int s=0); void setTime(int h,int m,int s); //输

C++语言基础 例程 函数重载

贺老师的教学链接 重载函数:同名同体,但接口不同 #include <iostream> using namespace std; int max(int a,int b,int c); //函数声明 double max(double a,double b,double c); long max(long a,long b,long c); int main( ) { int i1,i2,i3,i; cin>>i1>>i2>>i3; //输入3个整数 i=

C++语言基础 例程 不同类型数据间的转换

贺老师的教学链接  本课讲解 //类型转换函数应用 #include <iostream> using namespace std; class Complex { public: Complex( ) { real=0; imag=0; } Complex(double r,double i) { real=r; imag=i; } operator double( ); friend Complex operator + (Complex c1,Complex c2); private:

C++语言基础 例程 文件的随机读写

贺老师的教学链接  本课讲解 示例:写到尾再从头读 #include <iostream> #include <fstream> #include <cstdlib> using namespace std; int main( ) { int a[10], b[10]; fstream iofile("f1.dat",ios::in|ios::out); if(!iofile) { cerr<<"open error!&quo

C++语言基础 例程 C++的数据类型和运算符

贺老师的教学链接 第一个C++程序 #include <iostream> //包含头文件iostream using namespace std; //使用命名空间std int main( ) { cout<<"Hello World."<<endl; //输出结果 return 0; } 结构体类型在定义变量时,其前struct可以省略 #include <iostream> using namespace std; struct