使用类

目录:点我

一、重载

类的重载特性允许将C++现有的运算符的功能改为其他形式,举个栗子:

// 两个时间相加非重载版
class Time {
private:
	int hours;
	int minutes;
public:
	Time Sum(const Time & t) const;
};
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对象相加,需要调用成员方法Sum,举个栗子:

Time a, b;
a.Sum(b);

而使用重载方式则更加简单,举个栗子:

// 两个时间相加重载版
class Time {
private:
	int hours;
	int minutes;
public:
	Time operator+(const Time & t) const;
};
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;
}

此时可以使用下面两种方法实现两个对象的相加方法:

Time a, b;
a.operator+(b); // first
a + b; // second

注意:

  • 重载运算符不能改变需要的操作数个数,例如加法运算需要两个操作数,不能仅使用一个操作数完成加法运算。
    a + b; // 正确
    + a; // 错误
    
  • 重载运算符不改变运算符原有的优先级。
  • 不能创建新的运算符(只可重载标准运算符)。
  • 不能重载以下运算符:
    • sizeof:sizeof运算符
    • .:成员运算符
    • .*:成员指针运算符
    • :::作用域解析运算符
    • ?::条件运算符
    • typeid:一个RTTI运算符
    • const_cast:强制类型转换运算符
    • dynamic_cast:强制类型转换运算符
    • reinterpret_cast:强制类型转换运算符
    • static_cast:强制类型转换运算符
  • 以下运算符只能通过成员函数重载:
    • =:赋值运算符
    • ():函数调用运算符
    • []:下标运算符
    • ->:通过指针访问类成员的运算符

二、友元

上一篇:SpringTask 定时任务


下一篇:Blazor 组件之间使用 EventCallback 进行通信