运算符重载

1,定义
C++ 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载。

重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数列表和定义(实现)不相同。

当您调用一个重载函数或重载运算符时,编译器通过把您所使用的参数类型与定义中的参数类型进行比较,决定选用最合适的定义。选择最合适的重载函数或重载运算符的过程,称为重载决策。

2,实例
以一个结构体为例,重载比较运算符和输出运算符,结构体包含学生姓名和学生分数。定义大小关系首先按照学生分数来比较,分数相等的按学生姓名首字母进行比较。定义输出为学生姓名和学生分数。

3,源码
添加头文件Student.h如下:


#ifndef STUDENT_H
#define STUDENT_H

#include 
#include 

using namespace std;


struct Student{

    string name;
    int score;

    bool operator<(const Student& otherStudent){
        return score != otherStudent.score ?
               score > otherStudent.score : name < otherStudent.name;
    }

    friend ostream& operator<<(ostream &os, const Student &student){

        os<<"Student: "<

主程序如下:

#include 
#include "Student.h"

using namespace std;

template
void selectionSort(T arr[], int n){

    for(int i = 0 ; i < n ; i ++){

        int minIndex = i;
        for( int j = i + 1 ; j < n ; j ++ )
            if( arr[j] < arr[minIndex] )
                minIndex = j;

        swap( arr[i] , arr[minIndex] );
    }
}

int main() {
    string c[4] = {"D","C","B","A"}; // 测试模板函数,传入字符串数组
    selectionSort(c,4);
    for( int i = 0 ; i < 4 ; i ++ )
        cout<

你可能感兴趣的:(算法和数据结构)