• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
LOFLY
终其一生,编织快乐
博客园    首页    新随笔    联系   管理    订阅  订阅

C++之使用类

C++之使用类

C++之使用类

  • 运算符重载
  • 友元函数
  • 重载 << 运算符、 以便用于输出
  • 状态成员
  • 使用rand()生成随机值
  • 类的自动转换和强制类型转换
  • 类转换函数

运算符函数
operatorop(argument-list)
如 operator函数重载[]运算符。

#ifndef MYTIME0_H_
#define MYTIME0_H_

class Time
{
private:
    int hours;
    int minutes;
public:
    Time();
    Time(int h, int m=0);

    void addMin(int m);
    void addHr(int h);
    void reset(int h = 0, int m  =0 );
    Time Sum(const Time & t) const;
    void show() const;
    ~Time();
};
#endif
#include "mytime0.h"
#include <iostream>

Time::Time(){
    hours = minutes = 0;
}

Time::Time(int h, int m ){
   this->hours = h;
   this->minutes = m;
}

void Time::addHr(int h){
    hours += h;
}

void Time::addMin(int m){
    minutes += m;
    hours += minutes / 60;
    minutes %= 60;
}

void Time::reset(int h , int m){
    hours = h;
    minutes = m;
}

Time Time::Sum(const Time & t) const{
    Time sum ;
    sum.minutes = minutes + t.minutes;
    sum.hours = hours+t.hours+sum.minutes / 60;

    sum.minutes %= 60;
    return sum;
}

void Time::show() const{
    std::cout << hours << " hours, " << minutes << " minutes"; 
}

#include <iostream>
#include "mytime0.h"


int main(int argc, char const *argv[])
{
    using std::cout;
    using std::endl;


    Time planning;
    Time coding(2,40);
    Time fixing(5,55);
    Time total;

    cout << "planing time = " ;
    planning.show();
    cout << endl;

    cout << "coding time = " ;
    coding.show();
    cout << endl;

    cout << "fixing time = " ;
    fixing.show();
    cout << endl;

    total = coding.Sum(fixing);
    cout << "Coding.sum(fixing) = ";
    total.show();
    cout << endl;
    return 0;
}
将上面代码的sum函数改为operator+ 运算符重载的形式
#ifndef MYTIME0_H_
#define MYTIME0_H_

class Time
{
private:
    int hours;
    int minutes;
public:
    Time();
    Time(int h, int m=0);
    ~Time();

    void addMin(int m);
    void addHr(int h);
    void reset(int h = 0, int m  =0 );
    // Time Sum(const Time & t) const;
    Time operator+ (const Time &t) const;
    void show() const;
    
};
#endif
#include "mytime0.h"
#include <iostream>

Time::Time(){
    hours = minutes = 0;
}

Time::Time(int h, int m ){
   this->hours = h;
   this->minutes = m;
}

void Time::addHr(int h){
    hours += h;
}

void Time::addMin(int m){
    minutes += m;
    hours += minutes / 60;
    minutes %= 60;
}

void Time::reset(int h , int m){
    hours = h;
    minutes = m;
}

// Time Time::Sum(const Time & t) const{
//     Time sum ;
//     sum.minutes = minutes + t.minutes;
//     sum.hours = hours+t.hours+sum.minutes / 60;

//     sum.minutes %= 60;
//     return sum;
// }

Time Time::operator+(const Time & t) const{
    Time sum ;
    sum.minutes = minutes + t.minutes;
    sum.hours = hours+t.hours+sum.minutes / 60;

    sum.minutes %= 60;
    return sum;
}

void Time::show() const{
    std::cout << hours << " hours, " << minutes << " minutes"; 
}


Time::~Time(){

}
#include <iostream>
#include "mytime0.h"


int main(int argc, char const *argv[])
{
    using std::cout;
    using std::endl;


    Time planning;
    Time coding(2,40);
    Time fixing(5,55);
    Time total;

    cout << "planing time = " ;
    planning.show();
    cout << endl;

    cout << "coding time = " ;
    coding.show();
    cout << endl;

    cout << "fixing time = " ;
    fixing.show();
    cout << endl;

    total = coding + fixing;
    cout << "Coding.sum(fixing) = ";
    total.show();
    cout << endl;
    return 0;
}
运算符重载的限制 1.重载的运算符必须至少有一个操作数是用户定义的类型。 2.使用运算符时不能违反运算符原来的句法。 3.不能创建新的运算符 4.不能重载下面的运算符
  • sizeof
  • .
  • .*
  • ::
  • ?:
  • typeid
  • const_cast
  • dynamic_cast
  • reinterpret_cast
  • static_cast

5.下面的运算符只能通过成员函数重载

  • =
  • ()
  • []
  • ->
posted @ 2022-08-31 11:47  编织快乐  阅读(27)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3