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

重庆中国建设银行招聘信息网站做电商网站的公司简介

重庆中国建设银行招聘信息网站,做电商网站的公司简介,淄博网站推广那家好,免费申请网站空间目录 1.赋值运算符重载 1.1运算符重载 1.2赋值运算符重载 1.2.1赋值运算符重载格式 1.2.2赋值运算符只能重载成成员函数不能重载成全局函数 1.2.3同拷贝函数一样,如果类是形如日期类这样变量全是内置类型的,赋值运算符就必须自己实现,…

目录

1.赋值运算符重载

1.1运算符重载

1.2赋值运算符重载

1.2.1赋值运算符重载格式

1.2.2赋值运算符只能重载成成员函数不能重载成全局函数 

1.2.3同拷贝函数一样,如果类是形如日期类这样变量全是内置类型的,赋值运算符就必须自己实现,用编译器默认生成的就行,但是如果涉及到资源管理就必须要自己实现赋值运算符。

1.3前置++和后置++重载

2.const成员函数

3.取地址及const取地址操作符重载


 

                                                                时光不语,我们都在努力

这里是来自M--Y的专栏:C++启航

以下内容均为个人见解,如有不足还请指出

期待大家的点赞、收藏、评论(互三必回)诸君共勉

类中的6个默认成员函数

1.赋值运算符重载

1.1运算符重载

         运算符重载提高代码可读性。函数命名为关键字operator后面接需要重载的运算符符号

特别注意:

        1.不能通过连接其他符号来创建新的操作符,如operator@

        2.重载操作符必须有一个类类型参数

        3.用于内置类型的运算符,其含义不能改变

        4.作为类成员函数重载时,其形参看起来比操作数数目少1,这是因为成员函数的第一个参数是隐式的this

        5..*        ::        sizeof        ?;        .这五个运算符不支持重载

class Date

{

public:

       // ……

private:

        int  _year;

        int  _month;

        int  _day;

bool  operator==(const  Date& d1,const  Date& d2)

{

        //……

}

如果和上述代码一样定义成全局函数的话,就无法访问到Date类中的私有成员变量,如果要使代码编译通过的话,就必须将上述代码标红处给注释掉。

这样处理的话,显得过于麻烦,所以不如将函数封装成成员函数

封装成成员函数的时候我们需要注意一点,上面注意4提到,成员函数的第一个参数是隐式的this所以在代码上要做些许调整。

class Date

{

public:

        bool operator==(const Date& d)

        {

                return _year==d._year

                &&_month=d._month

                &&_day==d._month;

        }

private:

        int _year;

        int _month;

        int _day;

} ;

1.2赋值运算符重载

1.2.1赋值运算符重载格式

        1.参数类型:const T&(传递引用可以提高传参效率)

        2.返回值类型:T&。返回引用可以提高效率,同时在有些情况下可以支持连续赋值

        3.检测是否自己给自己赋值

        4.返回*this。目的:连续赋值,下文会细讲

1.2.2赋值运算符只能重载成成员函数不能重载成全局函数 

原因:如果用户将赋值运算符实现成全局的话,编译器就会自己生成一个默认的成员函数,这样两者就会产生冲突了

class Date

{

public:

        //……

        Date& operator=(const Date&d)

        {

                _year=d._year;

                _month=d._month;

                _day=d._day; 

                

                return *this;

        }

};

1.2.3同拷贝函数一样,如果类是形如日期类这样变量全是内置类型的,赋值运算符就必须自己实现,用编译器默认生成的就行,但是如果涉及到资源管理就必须要自己实现赋值运算符。

1.3前置++和后置++重载

思考:由上面叙述可以联想到关于++的运算符重载的函数名应该是operator++,但是这样的话如何区分前置++和后置++呢?

为了区分,C++特别规定:后置++重载时多加一个int类型的参数,但是调用时不用传参,编译器会自动传递。

//前置++

Date& operator++() 

{

        _day++;

        _month++;

        _year++;

        if(_day>GetMonthday())//实现输出某年某月的天数

        {

                _day-=GetMonthday();

                _month++

        }

        if(_month>=13)

        {

                _month-=12;

                _year++;

        }

        return *this;

}

后置++

//注意后置++是先是有后+1,因此需要一个临时变量来保存原来的值,所以函数的返回值应该是Date而不是Date&

Date operator++(int)

{

        Date temp=*this;

        //重复上述前置++步骤

        return temp;

 其实关于运算符的重载有很多+=,-=,+,-,>,<,>=,<=。但是如果每个运算符都按上述方式代码就会显得十分冗长。有没有什么办法呢?        答案是肯定的。

Date& Date:: operator+=(int day)//日期+天数=日期
{
    _day += day;

    while (_day > GetMonthDay(_year, _month))
    {
        _day -= GetMonthDay(_year, _month);
        _month++;
        if (_month == 13)
        {
            _year++;
            _month = 1;
        }
    }

    while (_day < 0)
    {
        _month--;
        if (_month == 0)
        {
            _year--;
            _month = 12;
        }
        _day += GetMonthDay(_year, _month);
    }

    return *this;
}

以上上+=为例,当我们实现一个运算符重载后,和它相关的运算符重载就会变得很简单实现,只需要进行复用就行 。

Date& operator-=(int day)//日期-天数=日期

{

        return *this+=-day

}

 Date& operator++()

{

      return *this+=1;

}

Date operator++(int)

{

        Date temp=*this;

        *this+=1;

        return temp;

 其他的运算符重载也和这类似,感兴趣的可以自己去尝试实现。

2.const成员函数

用cosnt修饰的成员函数被称为const函数,实际上const修饰的是成员函数中的this,但是一般const修饰变量会加在其前面,而this是隐式的,如何表示修饰的是this呢?

C++规定将cosnt+在函数后面,就表示对this的修饰。

Date operator+(int day) const

{

        //……

}

3.取地址及const取地址操作符重载

这两个函数一般不用重新定义,不是特殊情况,编译器会自动生成的够用。

Date* operator&()

{

        return this;

}

const Date* operator&() const

{

        return this;

}

 

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

相关文章:

  • 优秀网站共分享帝国 转 Wordpress
  • 传统企业公司网站优化案例网页设计是用什么软件
  • 友情链接网站免费官方商城下载
  • cdr做网站17做网站广州沙河地址
  • 不备案的网站可以做竞价吗在线设计外卖平台店招
  • 做门户网站的系统回龙观手机网站开发服务
  • 网站建设与运营的论文软件技术是干嘛的
  • 淘客网站开发公司上海百度移动关键词排名优化
  • 阿里巴巴国际站运营济南济南网站建设公司
  • 2008 做网站大图模板网站
  • 北京手机网站制作昆山建设局网站查预售
  • python3网站开发无锡大型互联网公司
  • 成都网站建设优化推广运营网站流程
  • 阿里巴巴网站制作会写网站怎么赚钱
  • 苏州有哪些做网站公司好网站页眉设计
  • 可以免费做网站python做网站的好处
  • 福永建网站手机好用的wordpress
  • 网页制作html代码陕西seo优化
  • thinkphp网站开发服务如何在搜索中找到自己做的网站
  • 松江区网站建设公司wordpress如何导入模板数据库
  • 太原网站免费制作营销型网站建设公司网络推广
  • 被网站开发公司坑上海外贸平台
  • 国外中文网站排行做家政网站公司名称
  • 网站售后服务内容最新域名查询ip
  • 海外网站域名企业备案号查询系统
  • 个人摄影网站模版网站上的logo怎么做
  • 网站免费正能量直播资源共享网站建设
  • 做网站每年需付费吗网站动态程序
  • 做请柬的网站wordpress 布局插件
  • 做网站软件 手机网站推广一般办法