当前位置: 首页 > news >正文

济南网站制作设计公司商丘网站建设案例

济南网站制作设计公司,商丘网站建设案例,视频网站是如何做的,深圳做h5网站C运算符重载详解 基本介绍运算符重载案列1. 赋值运算符重载2. 前置和后置重载3. cout,cin(流插入,流提取重载)4. 取地址重载 基本介绍 C为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,也具有其 返回值…

C++运算符重载详解

  • 基本介绍
  • 运算符重载案列
    • 1. 赋值运算符重载
    • 2. 前置++和后置++重载
    • 3. cout,cin(流插入,流提取重载)
    • 4. 取地址重载

基本介绍

C++为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,也具有其
返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。

(返回类型说明符) operator <想要重载的运算符符号>(参数)
{函数内容
}

注意:

  1. 不能通过连接其他符号来创建新的操作符:比如operator@
  2. 重载操作符必须至少有一个类类型参数
  3. 用于内置类型的运算符,其含义不能改变,例如:内置的整型+,不 能改变其含义
  4. 作为类成员函数重载时,其形参看起来比操作数数目少1,因为成员函数的第一个参数为隐
    藏的this
  5. .* :: sizeof ?: . 注意以上5个运算符不能重载。

运算符重载案列

1. 赋值运算符重载

赋值运算符重载格式
参数类型:const T&,传递引用可以提高传参效率
返回值类型:T&,返回引用可以提高返回的效率,有返回值目的是为了支持连续赋值
检测是否自己给自己赋值
返回*this :要复合连续赋值的含义

class Date
{
public:Date(int year = 1900, int month = 1, int day = 1){_year = year;_month = month;_day = day;}Date(const Date& d){_year = d._year;_month = d._month;_day = d._day;}Date& operator=(const Date& d){if (this != &d){_year = d._year;_month = d._month;_day = d._day;}return *this;}
private:int _year;int _month;int _day;
};

注意:

  1. 赋值运算符只能重载成类的成员函数不能重载成全局函数。
    原因:赋值运算符如果不显式实现,编译器会生成一个默认的。此时用户再在类外自己实现
    一个全局的赋值运算符重载,就和编译器在类中生成的默认赋值运算符重载冲突了,故赋值
    运算符重载只能是类的成员函数。
  2. 用户没有显式实现时,编译器会生成一个默认赋值运算符重载,以值的方式逐字节拷贝。
    所以,如果类中未涉及到资源管理,赋值运算符是否实现都可以;一旦涉及到资源管理则必
    须要实现

例如stack(栈)的实现中,必须自己实现赋值运算符重载。
在这里插入图片描述

2. 前置++和后置++重载

语法:
前置++
T& operator++();
后置++
T& operator++(int);

class Date
{
public:Date(int year = 1900, int month = 1, int day = 1){_year = year;_month = month;_day = day;}// 前置++:返回+1之后的结果// 注意:this指向的对象函数结束后不会销毁,故以引用方式返回提高效率Date& operator++(){_day += 1;return *this;}// 后置++:// 前置++和后置++都是一元运算符,为了让前置++与后置++形成能正确重载// C++规定:后置++重载时多增加一个int类型的参数,但调用函数时该参数不用传递,编译器自动传递// 注意:后置++是先使用后+1,因此需要返回+1之前的旧值,故需在实现时需要先将this保存一份,然后给this + 1//  而temp是临时对象,因此只能以值的方式返回,不能返回引用Date operator++(int){Date temp(*this);_day += 1;return temp;}
private:int _year;int _month;int _day;
};

3. cout,cin(流插入,流提取重载)

这里只需要记住语法形式就行了,我以日期类举例,注意这里我们需要提前将这两个函数作为日期类的友元函数。
又因为我们可能经常调用这两个函数,所以我们写成内联函数inline。

friend inline ostream& operator<<(ostream& out, const Date& d);
friend inline istream& operator >>(istream& in, Date& d);
//<<运算符重载
inline ostream& operator << (ostream& out, const Date& d)
{out << d._year << "年" << d._month << "月" << d._day << "日" << endl;return out;
}
//>>运算符重载
inline istream& operator >>(istream& in, Date& d)
{in >> d._year >> d._month >> d._day;return in;
}

4. 取地址重载

这个默认成员函数一般不用重新定义 ,编译器默认会生成。

class Date
{
public:Date* operator&(){return this;}const Date* operator&()const{return this;}
private:int _year; // 年int _month; // 月int _day; // 日
};

这个运算符一般不需要重载,使用编译器生成的默认取地址的重载即可,只有特殊情况,才需
要重载,比如想让别人获取到指定的内容

http://www.yayakq.cn/news/328916/

相关文章:

  • 企业网站建设的文章网站做多长时间才会成功
  • 深圳网站设计设计网站建设对促进部门工作的益处
  • ui设计流程培训网站网站丢了数据库还在
  • 娱乐城网站建设番禺南浦
  • 新手学做网站必备软件做淘宝详情页好的网站
  • 单招网是哪个网站制作公司做的设计一个个人网站
  • 网站开发 李博wordpress 打不开
  • 团购营销型网站制作怎么做淘宝一样的网站
  • 成都网站开发企业云南最大的网络科技公司
  • 安徽建站网站建设需准备什么软件
  • 永久免费网站空间安徽方圆建设有限公司网站
  • 如何使用上线了app建设网站嘉兰图设计有限公司
  • 网站建设叫什么软件app网站开发成本
  • 网站建设手机源码全网营销型网站建站专家
  • 网站推广策划公司如何创建网站后台
  • 如今做啥网站能致富中文域名
  • 手机在线制作表白网站福泉网站制作
  • 网页设计与制作商丘到的公司宿州网站建设优化
  • 现在c 做网站用什么框架在线购物网站模板
  • 网站做中文和英文切换anaconda可以做网站吗
  • 网站的域名可以更改吗山东省质量建设监督总站网站
  • 三星网站建设内容在线logo制作免费
  • 杭州做网站找力果乐山建设局网站
  • 网站建设的目的与意义wordpress 无法更换会员注册页面
  • 免费网站域名使用html教程菜鸟教程视频
  • 教育机构做网站的目的网站制作最新技术
  • 第三方网站做企业满意度调查安阳住房与城乡建设局官方网站
  • 美橙网站建设经典案例山西公司注册网上核名
  • 怎么建立一个个人网站灵感网站
  • 南京百家湖网站建设wordpress选取文章图片作为缩略图