C++中重载输入输出运算符的注意事项与友元函数
需积分: 9 109 浏览量
更新于2024-08-19
收藏 3.65MB PPT 举报
"C++重载输入输出运算符通常不应作为类的成员函数,而应使用友元函数。这是因为成员函数的左运算数总是类的对象,但输入/输出运算符期望左侧是流对象,右侧是类的对象。因此,为了正确重载`<<`和`>>`运算符,我们需要定义非成员友元函数。例如,对于一个名为`Aircraft`的类,我们可以这样重载:
```cpp
class Aircraft {
// ...
friend std::ostream& operator<<(std::ostream& os, const Aircraft& aircraft);
friend std::istream& operator>>(std::istream& is, Aircraft& aircraft);
// ...
};
std::ostream& operator<<(std::ostream& os, const Aircraft& aircraft) {
os << "Wingspan: " << aircraft.wingspan << ", Passengers: " << aircraft.passengers;
return os;
}
std::istream& operator>>(std::istream& is, Aircraft& aircraft) {
is >> aircraft.wingspan >> aircraft.passengers;
return is;
}
```
在C++中,程序结构通常包括分支结构(如`if`、`switch`等)和循环结构(如`for`、`while`等)。例如,从描述中提到的教材《计算机程序设计基础》中的P58页,可以看到分支结构的图示和循环结构的实例。程序设计中,常常会涉及结构体的使用,如定义一个`Aircraft`结构体来表示飞机,其中包含翼幅、乘客数量等属性。结构体成员的赋值和输出可以通过重载的输入输出运算符实现。
此外,程序设计的一个关键原则是数据封装和模块化。C++通过类支持这种思想,将数据和操作数据的函数封装在一起。函数的使用使得代码更加模块化,便于理解和维护。例如,可以编写一个`Swap`函数来交换两个整数的值,通过引用参数实现真正的交换。函数可以有默认参数,如`get_volume`函数计算体积,允许用户不提供所有参数时使用默认值。程序设计的流程通常是自顶向下,逐步细化,通过主函数调用子函数来实现功能。
面向对象编程(OOP)是C++中的核心概念,它强调通过对象来描述问题。每个对象都有自己的属性(数据成员)和行为(成员函数),并且可以通过继承和派生来构建类的层次结构。类的成员可以有不同的访问权限,保护对象的内部实现细节不被外部随意访问。析构函数在对象销毁之前自动执行,用于清理资源或执行必要的收尾工作。通过分解复杂对象,我们可以用简单的对象组合来理解它们,这在设计和实现大型系统时尤其有用。
函数和类都是封装的工具,但函数是单一功能的封装,而类则结合了数据和相关操作。类内的函数可以声明为内联,以减少函数调用的开销。构造函数用于初始化对象,而析构函数用于对象生命周期结束时的清理。在类的声明中定义构造函数和析构函数,但在类外实现成员函数,并使用`inline`关键字声明为内联函数,可以优化代码性能。"
以上内容详细解释了C++中重载输入输出运算符的规则、程序设计的基本结构、面向对象编程的核心概念以及函数和类的封装特性。
2010-11-10 上传
2012-08-03 上传
314 浏览量
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
2012-10-13 上传
点击了解资源详情
李禾子呀
- 粉丝: 26
- 资源: 2万+
最新资源
- Smoker-Generator:给我照片,我帮你抽烟!
- 三菱包装-mt 高级运动_PLC_q173_三菱_包装机_运动
- Research-report-Classification-system:爬取东方财富的宏观研究的研报,基于LSTM进行情感分析,分类为正向,负向和中性三类
- Sichem:C到C#代码转换器
- 毕业设计&课设--大学毕业设计-校园小助手.zip
- gulp-starter:gulp-starter 项目
- 毕业设计&课设--仿知乎社区问答类App,吉林大学计算机科学与技术学院毕业设计.zip
- oceanhonki
- Excel模板客户登记表格式.zip
- yii2-system-info:有关服务器的信息
- notence:not受notion.so(Alpha:pushpin:)启发的开源个人笔记应用程序
- 对数音符
- protonmail-api::envelope:ProtonMail的Node.js API
- incubator_labview_TCP断线重连_tcp通信
- xiuxian:修仙之路 - 小游戏 玩法同2048
- MyAdGuardFilter:我的AdGuard过滤器