1. 运算符重载
可以通过非成员函数(友元函数)和成员函数进行重载。但是赋值=、函数调用()、下标运算[]、指针访问成员->只能使用成员函数进行重载。
类声明:
class Time{
...
Time operator+(const Time & t) const;
}
类方法实现:
Time Time::operator+(const Time & t) const
{
...
}
使用:
A + B == A.operator+(B)
支持A + B+ C方式。
2. 友元函数重载运算符
友元函数、友元类、友元成员函数
友元函数和类的成员函数具有相同的访问权限,但它不是成员函数不能使用成员运算符调用。
类声明:
class Time{
...
friend Time operator*(double m, const Time & t);//只在类声明中才要friend关键字
}
类方法实现:
Time operator*(double m, const Time & t)
{
...//偷懒方法 return t*m; 从而调用之前的成员函数重载方法。
}
使用:
A = 2 * B == A = operator*(2, B)
重载<<:
ostream & operator<<(ostream & os, const Time & t)
{
os << t....;
return os;
}
3. 默认构造函数
如果没有提供任何函数,C++ 将创建默认构造函数。如果定义了构造函数,C++ 将不会定义默认构造函数。
Time::Time() //没有任何参数
{
}
4. 复制构造函数
若未定义,C++ 提供。
用于将一个对象复制到新创建的对象中。它用于初始化过程中,而不是常规赋值过程中。
原型通常为 Class_name(const Class_name & );
使用情况:
新创建一个对象并将其初始化为同类现有对象时。 Time A = B;|| Time A = Time(something); //创建临时对象然后复制给A
每当程序生成对象副本,即函数按值传递对象的时候都会使用复制构造函数。
浅复制,也即复制成员的值,当遇到字符串的时候应该自定义深复制传字符串而不是地址。
5. 赋值运算符
https://www.cnblogs.com/zpcdbky/p/5027481.html
若未定义,C++ 提供。
将已有对象赋值给另一个对象时,将使用重载的赋值运算符。
原型(只能由成员函数重载):Class_name & Class_name::operator=(const Class_name &);//返回引用是为了连续赋值。