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

在山东省建设监理协会网站婚庆公司网站建设方案

在山东省建设监理协会网站,婚庆公司网站建设方案,佛山seo扣费,企业seo关键词优化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/226617/

相关文章:

  • 简单网站建设教学视频做小程序怎么赚钱
  • 网站关键字可以修改吗Wordpress用户名是哪个
  • 网站建设7个基本流程步骤有哪些儿童网站设计
  • wordpress 大网站网站开发所需要的条件
  • 互联网推广怎么找客户seo优化策略主要包括哪些方面
  • 注销备案号 网站医院网站建设需要多少钱
  • 深圳学校网站定制设计长春做网站wang
  • e想时代官方网站网站建设dw实训总结
  • wordpress百度跟踪呼市网站seo优化工资提成怎么算
  • 网站文章内容一键排版功能长春有几个区
  • 域名购买后如何建设网站做淘宝主要看哪些网站
  • 电子书网站 自己做企业网站管理系统用户
  • 中山市饮食网站建设wordpress文章页面优化
  • 男生做男生网站在那看种子搜索神器在线引擎
  • 微信打不开网站网页翻译器在线翻译
  • 企业免费网站建设模板下载网站建设系统开发
  • 网站建设客户问题哪个网站做室内效果图厉害
  • 电子商务网站策划书布局设计微信公众号怎么推广
  • 如何做淘宝商城网站设计赣州新闻最新消息
  • 网站如何做口碑营销写网站建设的软文
  • 用dw做网站时怎么添加弹窗低价格制作网站
  • 网站导航栏按钮中国龙头企业十大排行榜
  • 哪里有学习做网站的兰州网站开发企业
  • 武城县建设局网站网站登录页做多大尺寸的
  • 怎么做手机版网站wordpress阿里图标库
  • 巴中市住房和城乡建设局网站完整网站开发
  • 关于建设网站的报告书wordpress无法发邮件
  • 图书馆 网站开发 总结wordpress音乐插件h5
  • 廊坊网站制作系统2018做网站还赚钱吗
  • 自适应网站模板网络建站公司如何做市场