您好!欢迎来到源码码网!

C++ Primer Plus 随记

  • 行业资讯
  • 来源:源码码网
  • 编辑:admin
  • 时间:2020-05-13 16:32
  • 阅读:482

1. operator+() :重载+运算符 operator* ():重载*运算符  使得可以直接对类类对象进行+ 或 * 操作


假设 district, sid, sara 是类Salaperson的对象,可编写:


district=sid+sara;// 等价于下一句 ,这两个都调用operator+()方法,sid是调用对象,sara作为参数被传递的对象。


district=sid.operator+(sara);


2.重载运算符不必是成员函数,但必须至少有一个操作数是用户定义的类型。(有些运算符只能通过成员函数重载  = 、() [ ] ->)


假设Time类 class Time{ privates: int hours; int minutes;  public: ...........};


3.友元:友元函数,友元类,友元成员函数。 可以访问类的私有数据


(要实现加法或乘法的交换律,必须用友元函数重载加法或乘法。)


4.(1)创建友元函数:原型放在类声明中,但它不是成员函数,并在声明前加关键字friend 

friend Time operator* (double m,const Time & t); //返回值是Time类


//虽然放在类声明中,但它不是成员函数,不能使用成员运算符句点 . 来调用,但与成员函数有相同的权限


(2)定义友元函数:不用类限定符::,定义时不加关键字friend


Time operator* (double m,const Time & t){...........}


5.如果要为类重载运算符,并将非类的项作为其的第一操作数,则可以用友元函数来反转操作数顺序


6.重载<<运算符:


(1)使用友元函数第一种:


void operator<<(ostream &os, const Time &t){


os<<t,hours<<"hours, "<<t.minutes<<" minutes."; } //cout是ostream类的对象,通过os引用cout对象。应该引用cout本身,而                        //不 是它的拷贝,该函数按引用(而不是按值)来传递参数。当创建的一个新的对象被返回时,不应该用引用返回。


当trip是Time的对象时,可以使用cout<<trip;  输出4 hours, 25 minutes


(2)使用友元函数第二种,这种也可以用于输出写入文件中


ostream & operator<<(ostream &os, const Time &t){  //与第一种相比,有返回类型ostream &


os<<t,hours<<"hours, "<<t.minutes<<" minutes.";


return os; }


可以实现:cout<<"Trip time: "<<trip<<" (Tuesday) ";


7. 当成员函数或友元函数的代码很短时,可以将声明和定义同时进行,写在类声明中,这样函数变成了内联函数。


8 对很多运算符,可以选择使用成员函数或非成员函数来实现运算的重载。如:


Time operator+(const Time &t) const; //成员函数


friend Time operator+( const Time &t1, const Time &t2 ); //非成员函数 


8.在名称空间VECTOR中定义了类vector的成员函数和友元函数时,友元函数要使用类中常量REC时, vector::REC


外部声明对象时vector folly(20 ,30 , VECTOR::vector::REC);


9. 类的自动转换:只有接受一个参数的构造函数才能作为转换函数。


class Stonewt

{ 

private: 

  enum {Lbs_per_stn=14};

  int stone;

  double pds_left;

  double pounds;

public:

  Stonewt(double lbs);

  Stonewt(int stn,double lbs);

  Stonewt();

  ~Stonewt();

};

(1)将int类型转换为类Stonewt类型:(只有一个参数的类构造函数用于将类型与该参数相同的值转换为类类型)


Stonewt  wall=325.25; //用Stonewt(double)来设置全部3个成员,将double类型赋值给类对象,转换为类类型


Stonewt  taft=325; //int先转换为double,再用Stonewt(double)来设置全部3个成员。


(2)将类类型转化到其他类型:需要转换函数,即有用户定义的强制类型转换。转换函数是类成员,无返回类型,无参数,名为 operator typeName(),其中typeName为对象将被转换成的类型。


Stonewt wolfe(285.7);


double host=double (wolfe); //#1  or    double host=(double)  wolfe; //#2


要实现#1和#2,需要在类的方法中声明 转换为double类型的函数原型: operator double() const; //转换函数


Stonewt walls(20,3);


double star=walls; // 右侧是类类型,左侧是double,编译器将先查看是否有匹配的转换函数,有则隐式调用编译成功,无则出错


不需要编译器自动寻找匹配的编译函数来自动转换 ,可以用关键字explicit来强制转换:


  explicit operator int() const;  //仅被显示调用


10. 转换函数可以用非转换函数来替换:


Stonewt::operator int() {return int (pounds+0.5); }  调用语句:  int plb=walls;


替换为:


int  Stonewt::Stone_to_Int()  {return int (pounds+0.5); }


则调用语句为: int plb=walls.Stone_to_Int();

————————————————


原文链接:https://blog.csdn.net/lvliang2017232003/java/article/details/86139452


特别声明:
1、如无特殊说明,内容均为本站原创发布,转载请注明出处;
2、部分转载文章已注明出处,转载目的为学习和交流,如有侵犯,请联系客服删除;
3、编辑非《源码码网》的文章均由用户编辑发布,不代表本站立场,如涉及侵犯,请联系删除;
全部评论(0)
推荐阅读
  • 陀螺匠OA办公系统源码 PHP + Vue 前后端分离 完整可商用
  • 陀螺匠OA办公系统源码 PHP + Vue 前后端分离 完整可商用
  • 项目介绍《陀螺匠》是一套采用Laravel9框架结合Swoole高性能框架与Vue.js前端技术栈构建的AI+低代码双引擎智能办公系统。陀螺匠深度融合了AI智能体以及低代码开发平台,系统简约,易于功能扩展,方便二次开发。旨在为企业提供一站式、数智化转型的全方位解决方案,助力企业高效运营与智能决策。源码说明源码说明:项目代码100%开源,基于AGPL-3.0,支持免费商用!技术栈:系统基于Laravel9+Swoole+Vue.
  • 软件教程
  • 来源:CRMEB
  • 编辑:CRMEB
  • 时间:2026-03-27 15:33
  • 阅读:653
  • open claw最近很火,如何理性看待?
  • open claw最近很火,如何理性看待?
  • openclaw是2026年初科技圈最火爆的现象级话题。它不仅仅是又一个AI产品,更被百川智能的王小川誉为与ChatGPT诞生同等重要的里程碑——标志着AI从”只会说”的对话者,进化到了”能够做”的行动者。对于这股全民”养虾”热潮,我的观察是:它代表了一次人机关系的革命性跃迁,但同时也是一场充满风险与泡沫的狂欢,其真正的价值需要在喧嚣褪去、安全与成本的挑战被克服后才能显现。下
  • 行业资讯
  • 来源:源码码网
  • 编辑:源码码网
  • 时间:2026-03-17 11:06
  • 阅读:715
  • 原生小程序和封装的小程序有什么区别
  • 原生小程序和封装的小程序有什么区别
  • 原生小程序和封装的小程序是两种不同的开发模式,主要区别在于开发方式、性能表现、代码维护以及跨平台能力。为了让你更清晰地理解,我们可以把“原生”比作用钢筋水泥直接盖楼,而“封装”则是用预制板或套件来组装楼。以下是详细的对比分析:1.定义与本质原生小程序:定义: 直接使用微信官方提供的开发工具、语法和API进行开发。语言: 使用微信自己定义的一套技术栈(WXML(微信标记语言)做结构、WXSS(微信样式表)做样式、JS
  • 行业资讯
  • 来源:源码码网
  • 编辑:源码码网
  • 时间:2026-03-06 11:54
  • 阅读:943
  • 基于NetCore(Razor Page)开发的Cms建站系统MIT协议
  • 基于NetCore(Razor Page)开发的Cms建站系统MIT协议
  • FytSoaCms一款基于NetCore2.2/3.1(RazorPage)功能强大的Cms建站系统,支持前后端分离。简介:模块化:全新的架构和模块化的开发机制,便于灵活扩展和二次开发。模型/栏目/分类信息体系:通过栏目和模型绑定,以及不同的模型类型,不同栏目可以实现差异化的功能,轻松实现诸如资讯、下载、讨论和图片等功能。通过分类信息和栏目绑定,可以自动建立索引表,轻松实现复杂的信息检索。FytSoa是一套基于NetCore+SqlS
  • 开发工具
  • 来源:gitee
  • 编辑:源码码网
  • 时间:2026-01-24 22:21
  • 阅读:798
  • 基于JAVA开发的企业级平台微信公众号管理系统SmartWx
  • 基于JAVA开发的企业级平台微信公众号管理系统SmartWx
  • SmartWx微信公众号管理系统是一个完整的微信公众号web操作版,直接编译即可运行。让用户不再用关心微信的底层接口,直接使用页面进行操作,简单方便。包括服务器绑定、文本管理、图文管理、菜单管理、粉丝管理、群发消息等。技术框架开发语言:JAVA数据库:MYSQLJAVA开发框架:SpringMVC+Spring+Mybatis缓存框架:j2cache前端开发框架:Layui+JQuery+html前台模板引擎:art-templat
  • 源码教程
  • 来源:gitee
  • 编辑:源码码网
  • 时间:2026-01-24 21:53
  • 阅读:832
联系客服
源码代售 源码咨询 技术开发 联系客服
029-84538663
手机版

扫一扫进手机版
返回顶部