使用类
11.1 运算符重载
引出:运算符重载使得语言更加灵活,生活中也是这样,比如英语中不同的物体使用不同的动词,这样英语就会变得非常笨拙。 C++中基本数据类型可以做加法,但是如果对+运算符重载后,就可以实现了两个对象加法运算。
11.2 计算时间:一个运算符重载的例子
书上给出了重载时间类的例子,见Day30中的例子。 重载运算符限制:
- 不能重载以下运算符:
sizeof运算符 . 成员运算符 .*成员指针运算符 ::作用域运算符 ?:条件运算符 强制类型转换运算符:const_cast ,dynamic_cast ,reinterpret_cast, static_cast 运算符
11.3 友元
C++控制对类的私有成员的访问,但是通过友元可以赋予友元函数类的私有访问权限。 见Day30,类的友元函数实现。声明使用friend,但是实现时不能用friend。
11.4 重载运算符:作为成员函数还是非成员函数
Time类的加法运算符:
Time operator+(const Time & t) const;
可以转换为如下的非成员函数:
friend Time operator+(const Time & t) const;
11.5 重载:一个Vector矢量例子
一个Vector类的实现,见Day029,这是一个综合的例子,看完这个例子对以前学过的知识是一个很好的提升。
11.6 类的自动类型和强制类型转换
long count = 8
那么是否可以将类转换为基本的数据类型,
例子见Day028,
explicit operator int() const;
Stonewt::operator int() const
{
return int(pounds + 0.5);
}
Stone st;
int a = (int ) st;
类和基本数据类型进行加法时的选择:
C++中的类的构造函数可以将某种类型转换为类类型,但是相反的转换要用C++运算符函数转换。 int类型和stone类的类型相加,两种方法:
- 第一种:通过构造函数将基本数据类型转换为类的类型,然后利用友元函数实现的运算符重载:
operator+(const Stone & , const Stone &);
- 第二种方法:将加法运算符重载为一个显示使用double类型的参数的函数:
friend Stone operator+(double x, Stone & s);
|