简介
在类比较方面,三目运算符可以用于重载比较运算符。
代码示例1
#include <iostream>
#include <cstring>class Person {
public:Person(const char* name, int age) : m_age(age) {m_name = new char[strlen(name) + 1];strcpy(m_name, name);}~Person() {delete[] m_name;}bool operator==(const Person& other) const {return m_age == other.m_age && strcmp(m_name, other.m_name) == 0;}bool operator!=(const Person& other) const {return !(*this == other);}private:char* m_name;int m_age;
};int main() {Person john("John", 25);Person jane("Jane", 27);Person john2("John", 25);std::cout << "john == jane: " << ((john == jane) ? "true" : "false") << std::endl;std::cout << "john != jane: " << ((john != jane) ? "true" : "false") << std::endl;std::cout << "john == john2: " << ((john == john2) ? "true" : "false") << std::endl;return 0;
}
输出结果如下
代码实例2
三目运算符可以在继承类中使用,与之前的示例演示无异。比较运算符重载同样可以在继承类中使用,子类可以重载父类的比较运算符。例如,以下是一个使用继承和比较运算符重载的例子
#include <iostream>
#include <cstring>class Person {
public:Person(const char* name, int age) : m_age(age) {m_name = new char[strlen(name) + 1];strcpy(m_name, name);}~Person() {delete[] m_name;}bool operator==(const Person& other) const {return m_age == other.m_age && strcmp(m_name, other.m_name) == 0;}protected:char* m_name;int m_age;
};class Student : public Person {
public:Student(const char* name, int age, int score) : Person(name, age), m_score(score) {}bool operator==(const Student& other) const {return Person::operator==(other) && m_score == other.m_score;}private:int m_score;
};int main() {Person john("John", 25);Person jane("Jane", 27);Student john2("John", 25, 90);Student john3("John", 25, 91);std::cout << "john == jane: " << ((john == jane) ? "true":"false") << std::endl;std::cout << "john == john2: " << ((john == john2) ? "true" : "false") << std::endl;std::cout << "john2 == john3: " << ((john2 == john3) ? "true" : "false") << std::endl;return 0;
}
在这个示例中,我们定义了两个类 Person 和 Student,Student 类继承自 Person 类,并添加了一个名为 m_score 的成员变量和一个名为 operator== 的比较运算符重载。在 operator== 函数中,我们首先调用基类的 operator== 方法
,然后比较 m_score 的值。