C++基础学习(八),运算符类型和运算符重载


#include <iostream>

using namespace std;

class Date
{
public:
	Date(int year, int month, int day)
		:m_nYear(year), m_nMonth(month), m_nDay(day)
	{

	}
	
	Date& operator ++()
	{
		++m_nDay;
		return *this;
	}

	Date& operator --()
	{
		--m_nDay;
		return *this;
	}

	void displayDate()
	{
		cout<<m_nYear<<"/"<<m_nMonth<<"/"<<m_nDay<<endl;
	}

private:
	int m_nDay;
	int m_nMonth;
	int m_nYear;
};

int main()
{
	Date today(2018, 5, 19);
	today.displayDate();
	++today;
	today.displayDate();
	today--;
	today.displayDate();

	system("pause");
	return 0;
}


#include <iostream>
#include <sstream>
#include <string>

using namespace std;

class Date
{
public:
	Date(int year, int month, int day)
		:m_nYear(year), m_nMonth(month), m_nDay(day)
	{

	}

	operator const char*()
	{
		ostringstream formattedDate;
		formattedDate<<m_nYear<<"/"<<m_nMonth<<"/"<<m_nDay;
		date2string = formattedDate.str();
		return date2string.c_str();
	}

	void displayDate()
	{
		cout<<m_nYear<<"/"<<m_nMonth<<"/"<<m_nDay<<endl;
	}

private:
	int m_nDay;
	int m_nMonth;
	int m_nYear;
	string date2string;
};

//转换运算符测试
int main()
{
	Date date(2018, 5, 19);
	cout<<date<<endl;

	system("pause");
	return 0;
}


#include <iostream>

using namespace std;

template<typename T>
class Smart_Pointer
{
public:
	Smart_Pointer(T* pData)
		:m_pRawPointer(pData)
	{

	}

	~Smart_Pointer()
	{
		delete m_pRawPointer;
	}

	T& operator* () const
	{
		return *m_pRawPointer;
	}

	T* operator ->() const
	{
		return m_pRawPointer;
	}

private:
	T* m_pRawPointer;
};

class Date
{
public:
	Date(int year, int month, int day)
		:m_nYear(year), m_nMonth(month), m_nDay(day)
	{

	}

	void displayDate()
	{
		cout<<m_nYear<<"/"<<m_nMonth<<"/"<<m_nDay<<endl;
	}

private:
	int m_nDay;
	int m_nMonth;
	int m_nYear;
};

//重载*和->运算符测试
int main()
{
	Smart_Pointer<int> pDynamicInt(new int(12));
	Smart_Pointer<Date> pDynamicDate(new Date(2018, 5, 19));

	cout<<*pDynamicInt<<endl;
	pDynamicDate->displayDate();
	system("pause");
	return 0;
}

#include <iostream>

using namespace std;

class Date1 
{
public:
	Date1(int year, int month, int day)
		:m_nYear(year),m_nMonth(month),m_nDay(day)
	{

	}

	Date1 operator +(int day)
	{
		return Date1(m_nYear, m_nMonth, m_nDay+day);
	}

	Date1 operator -(int day)
	{
		return Date1(m_nYear,m_nMonth,m_nDay-day);
	}

private:
	int m_nYear;
	int m_nMonth;
	int m_nDay;
};

//双目加减法运算符重载
int main()
{
	Date1 date1(2018,5,19);
	Date1 date2 = date1 - 10;//(2018.5.9)

	system("pause");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/u012592062/article/details/80373133