if (this -- shs)

发布时间:2024年01月22日

if (this -- shs)
return *this;
baseDMA :: operator=(hs); // copy base portion
style = new char[std :: strlen(hs.style) + 1];
std :: strcpy(style, hs.style);
return *this;

1

std :: ostream & operator << {std :: ostream & os, const hasDMA & hs)

os << (const baseDMA &) hs;
os << "Style: " << hs.style << std :: endl;
return os;

在程序清单13.13和13.14中,需要注意的新特性是,派生类如何使用基类的友元。例如,请考虑下面
这个hasDMa类的友元:
friend std :: ostream & operator << (std :: ostream & os, const hasDMA & rs) :
作为hasDMA类的友元,该函数能够访问style成员。但是,还存在一个问题:该函数如不是baseDMA
类的友元,那它如何访问成员lable和rating呢?答案是使用 baseDMA 类的友元函数 operator << ()。下一
个问题是,因为友元不是成员函数,所以不能使用作用域解析操作符来指出要使用哪个函数。这个问题的
解决方法是使用强制类型转换,以便匹配原型时能够选择正确的函数。因此,代码将参数const hasDMA&
转换成类型为 const baseDMA &的参数:
std :: ostream & operator << (std :: ostream & os, const hasDMA & hs)

// typecast to match operator << (ostream &. const baseDMA &)
os << (const baseDMA &) hs:
os << "Style: " << hs.style << endl:
return os:

程序清单13.15是一个测试类bascDMA、lackDMA和hasDMA的小程序。

程序清单 13.15 usedma.cpp
// usedma.cpp -- inheritance, friends, and DMA
// compile with dma.cpp
finclude <iostream>
#include "dma.h"
int main()

using std :: cout;
using std :: endl;

baseDMA shirt ("Portabelly", 8);
lacksDMA balloon ("red", "Blimpo", 4);
hasDMA map ("Mercator", "Buffalo Keys", 5);
cout << shirt << endl:
cout << balloon << endl:
cout << map << endl;
lacksDMA balloon2 (balloon):
hasDMA map2:
map2 - map:
cout << balloon2 << endl:
cout << map2 << endl;
return 0:

程序清单13.13~13.15组成的程序的输出如下:
Label: Portabelly

文章来源:https://blog.csdn.net/Popcorn_zyh/article/details/135745047
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。