1.运算符重载?
定义:名称相同但参数列表不同的函数是函数重载。运算 符重载就是对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型。
class Time
{
private:int hours;
int minutes;
public:
Time();
Time operator +(const Time&t)const;
Time operator-(const Time&t)const;
Time operator*(double n)const;
}
Time::Time()
{
hours = minutes = 0;
}
Time Time::operator+(const Time& t)const
{
Time sum;
sum.minutes = minute + t.minutes;
sum.hours = hours + t.hours + sum.minutes / 60;
sum.minutes %= 60;
return sum;
}
Time Time::operator-(const Time& t)const
{
Time diff;
int tot1, tot2;
tot1 = t.minutes + 60 * t.hours;
tot2 = minute + 60 * hours;
diff.minutes = (tot2 - tot1) % 60;
diff.hours = (tot2 - tot1) / 60;
return diff;
}
Time Time::operator*(double mult)const
{
Time result;
long totalminutes = hours * mult * 60 + minutes * mult;
result.hours = totalminutes / 60;
result.minutes= totalminutes%60;
return result;
}
- 不能重载sizeof ,.:,.*:,?::,const_cast,dynamic_cast,static_cast等运算符。
2.友元?
分类:友元函数,友元类,友元成员函数。
2.1为什么使用友元函数?
具体来说是为了让其他类的成员函数能直接的访问该类的私有变量。即:允许外面的类或函数去访问类的私有变量和保护变量,从而使两个类共享同一个函数。
使用友元函数的两种情况:(1)运算符重载的某些场合需要使用友元。(2)两个类共享数据的时候。
2.2使用友元函数优缺点?
(1)优点:能够提高效率,表达简单、清晰。
(2)缺点:友元函数破坏了封装机制,尽量不使用成员函数,除非不得已的情况才使用友元函数。
创建友元:
//friend Time operator *(double m,const Time &t);
class INTEGER
{
private:
friend void Print(const INTEGER& obj);
};
void Print(const INTEGER& obj)
{
//函数体
}
void main()
{
INTEGER obj;
Print(obj);//直接调用
}
2.3使用友元函数和类的成员函数的区别?
(1) 成员函数有this指针,而友元函数没有this指针。
(2)友元函数是不能被继承的,就像父亲的朋友未必是儿子的朋友。