c++ 类的使用 友元函数 重载运算符

#ifndef S_H_
#define S_H_
#include "iostream"

class s
{
private:
	int minutes;
	int hours;
public:
	s(void); //不给任何参数的默认构造函数 如果写了 给参的构造函数且不写这个无参的构造函数的话 那么错误 这个构造函数不存在
	s(int h, int m);
	void show(void) const; //函数形参括号外 加const该对象的数据 不可更改 方法内部定义的局部变量可以被更改
	s reset(const int h, const int m);
    s operator+(const s &one)const; 
	void printAddress(const char* str = NULL); 
	friend s operator*(s a, int time); //友元函数 才允许形参有 非类类型的变量存在 且都必须带有一个类类型的形参 形参变量的位置决定了 使用这个符号 变量摆放的位置
	friend std::ostream& operator<<(std::ostream &os, const s &a); //重载<<符号输出 , 要连续使用(例如 cout << a << b)的话 就必须 返回ostream的引用 os 的位置和a 的位置也是有讲究的
	virtual ~s(void);
};
#endif

#include "s.h"


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

s::s(void)
{
	this->hours = 0;
	this->minutes = 0;
}

void s::printAddress(const char *str) //默认构造参数 在实现的时候不能写参数 只在头文件定义里面写就可以了
{
	std::cout << str << this << "\n";
}
void s::show(void) const
{

	std::cout << hours << "h " << minutes << "m" << std::endl;

}

s s::reset(const int h, const int m)
{
	this->hours = h;
	this->minutes = m;
	return *this;
}

s s::operator+(const s &one)const
{
s sum; 
sum.hours = this->hours + one.hours;
sum.minutes = this->hours + one.minutes;
if(sum.minutes >= 60)
{
	sum.hours += sum.minutes / 60;
	sum.minutes += sum.minutes % 60;
}

return sum;

}

s operator*( s a, int time)
{
	a.hours *= time;
	a.minutes *= time;
	return a;
}
std::ostream&  operator<<(std::ostream &os, const s &a)
{
	os << a.hours << " h" << a.minutes << " m" << std::endl; 
	return os;
}
s::~s(void)
{
	std::cout << "析构.........";
	this->printAddress("析构的地址: ");

}

你可能感兴趣的:(c++)