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.下面的运算符只能通过成员函数重载
- =
- ()
- []
- ->
浙公网安备 33010602011771号