运算符重载

  1. 一元运算符重载:运算符重载就是函数重载;函数重载通常会有两种方式来实现:友元函数和成员函数;重载运算符:operator
  • 负号重载(-):

成员函数实现运算符重载的实例代码

 1 class Coordinate{
 2 private 3   int mX;
 4   int mY;
 5 public:
 6   Coordinate& operator-();//成员函数实现运算符重载
 7 }
 8 Coordinate& Coordinate::operator-(){
 9      mX=mX-1;
10      mY=mY-1;
11      return *this;
12 }

 

  • ++重载(前置/后置):

成员函数实现前置和后置++重载(声明文件:Coordinate.h):

 

 1 #ifndef COORDINATE_H_INCLUDED
 2 #define COORDINATE_H_INCLUDED
 3 class Coordinate{
 4 //friend Coordinate &operator(Coordinate &temp);
 5 
 6 public:
 7     Coordinate(int x,int y){
 8     mX=x;
 9     mY=y;
10 }
11     Coordinate &operator++();//前置(++)成员函数重载方式
12     Coordinate operator++(int);//后置(++)成员函数重载方式,返回的不是引用而是一个对象,并且用参数int来标记其为后置++
13     int getMx();
14     int getMy();
15 private:
16     int mX;
17     int mY;
18 };
19 #endif // COORDINATE_H_INCLUDED

 

(实现文件:Coordinate.cpp):

 1 #include"Coordinate.h"
 2 Coordinate &Coordinate::operator++(){
 3     mX = mX+1;
 4     mY = mY+1;
 5     return *this;
 6 }
 7 Coordinate Coordinate::operator++(int){
 8     Coordinate co(*this);
 9     mX++;
10     mY++;
11     return co;
12 }
13 int Coordinate::getMx(){
14     return mX;
15 }
16 int Coordinate::getMy(){
17     return mY;
18 }

     2. 二元运算符重载:也有成员函数重载和友元函数重载两种方式

  • <<运算符(只能够用友元函数进行重载,因为此时运算符的右边才是当前对象,如果是利用成员函数进行重载,那么当前对象必然在左边)
 1 //Coordinate.h
 2 #ifndef COORDINATE_H_INCLUDED
 3 #define COORDINATE_H_INCLUDED
 4 #include <iostream>
 5 using namespace std;
 6 class Coordinate
 7 {
 8 
 9     friend ostream &operator<<(ostream &out,const Coordinate &co);
10 public:
11     Coordinate(int x,int y)
12     {
13         mX=x;
14         mY=y;
15     }
16     Coordinate &operator++();//前置(++)成员函数重载方式
17     Coordinate operator++(int);//后置(++)成员函数重载方式,返回的不是引用而是一个对象,并且用参数int来标记其为后置++
18     int getMx();
19     int getMy();
20 private:
21     int mX;
22     int mY;
23 };
24 #endif // COORDINATE_H_INCLUDED
//Coordinate.cpp
#include"Coordinate.h"
Coordinate &Coordinate::operator++(){
    mX = mX+1;
    mY = mY+1;
    return *this;
}
Coordinate Coordinate::operator++(int){
    Coordinate co(*this);
    mX++;
    mY++;
    return co;
}
ostream &operator<<(ostream &out,const Coordinate &co){
    out<<co.mX<<","<<co.mY;
   return out;
}
int Coordinate::getMx(){
    return mX;
}
int Coordinate::getMy(){
    return mY;
}
  • []索引运算符(只能够用成员函数重载,不能够用友元函数进行重载,原因是当前对象只能作为运算符左边的操作对象进行操作)
1  int operator[](int index);//在当前对象的类中声明,在Coordinate.h中
2 //关于重载函数的实现,在Coordinate.cpp中
3 int Coordinate::operator[](int index){
4     if(index==0)return mX;
5     else return mY;
6 }

小结:利用成员函数实现运算符重载和利用友元函数实现运算符重载仍旧是有所区别的,如果说当前对象的位置只能在运算符左边,必然只能使用成员函数来实现重载;若是只能在右边,则必然只能私用友元函数来实现;若是说两个操作数的对象可以互换,那么两种实现方式均可;通常情况下,我们默认一元运算符的重载用成员函数实现,二元运算符的重载用友元函数来实现(当然肯定也是有特例的)。

转载于:https://www.cnblogs.com/upup-2015/p/5040830.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值