C++面向对象:运算符重载——以单目运算符++为例

需积分: 13 2 下载量 192 浏览量 更新于2024-08-24 收藏 5.27MB PPT 举报
"重载单目运算符-C++面向对象程序设计(谭浩强版)" C++面向对象程序设计中,运算符重载是一项关键特性,它允许程序员为已有的运算符赋予新的含义,以适应特定类的需求。在描述中提到的"重载单目运算符"是指那些只需要一个操作数的运算符,例如单目加法运算符`++`。在C++中,重载单目运算符的函数可以作为非成员函数或成员函数来定义。对于成员函数,由于运算符与类的对象紧密关联,它可以直接访问类的私有和保护成员,因此有时候可以不接受任何参数。 以描述中的"例4.5 Time类"为例,Time类可能包含三个数据成员:小时、分钟和秒,用于模拟秒表的计时功能。在C++中,我们可以为Time类重载单目运算符`++`,使得每次调用该运算符,秒表会增加一秒。如果秒达到60,就需要进位到分钟,并将秒归零;同样,当分钟达到60时,需要进位到小时并重置分钟。这个例子展示了如何通过运算符重载来实现复杂的逻辑操作。 在C++中,单目运算符的重载通常有两种方式: 1. **成员函数**:这种情况下,运算符重载函数是类的成员,可以直接访问类的私有和保护成员。例如,对于Time类,可以定义如下成员函数: ```cpp class Time { private: int hour, minute, second; public: // 重载前置自增运算符 Time& operator++() { ++second; if (second == 60) { second = 0; ++minute; if (minute == 60) { minute = 0; ++hour; } } return *this; } }; ``` 在这个例子中,`operator++()`返回对当前对象的引用,这样可以支持连续自增,如`time++; time++;`。 2. **友元函数**:如果运算符重载需要访问类的私有或保护成员,但不能作为成员函数实现(例如,因为需要对类的对象进行非成员操作),可以定义一个友元函数。然而,在本例中,成员函数通常是更好的选择。 C++的发展历程中,从C语言的结构化和模块化程序设计演变为面向对象的编程语言,引入了类、对象、继承、多态等核心概念。C++对C的增强不仅限于面向对象机制,还包括了对原始面向过程机制的扩展,如模板、异常处理、命名空间等。学习C++意味着可以灵活地在面向过程和面向对象两种编程范式之间切换,以适应不同的编程需求。 C++语言的词法和词法规则对于理解和编写C++程序至关重要。它包括关键字、标识符、运算符、分隔符和注释符。关键字是预定义的保留词汇,如`int`、`if`等,标识符是程序员自定义的名称,而运算符则是执行特定操作的符号,如`+`、`-`、`*`等。了解这些基本元素的规则可以帮助我们编写符合语法规则的代码。