您好!欢迎来到源码码网

C++ Primer Plus 随记

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

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)
推荐阅读
  • 工程项目一体化自动管理软件解决方案
  • 工程项目一体化自动管理软件解决方案
  • 1.项目概述1.1项目背景在工程建设行业数字化转型浪潮下,传统项目管理面临信息孤岛、协同困难、进度不可控、成本超支等痛点。本方案旨在构建一个覆盖工程项目全生命周期、全参与方、全业务流程的一体化智能管理平台。1.2解决方案愿景打造数据驱动、智能协同、风险预警、自动执行的工程大脑,实现:管理流程自动化率≥80%项目协同效率提升40%成本偏差率降低至±3%以内安全事故发生率降低60%1.3目标用户矩阵┌───────────────┬
  • 行业资讯
  • 来源:源码码网
  • 编辑:源码码网
  • 时间:2026-01-09 11:26
  • 阅读:162
  • 车辆管理系统需求文档与技术架构PC端+小程序
  • 车辆管理系统需求文档与技术架构PC端+小程序
  • 第一部分:需求文档1.项目概述1.1项目背景为企事业单位、车队运营商、租赁公司等提供一套完整的车辆全生命周期管理解决方案,实现车辆管理数字化、智能化。1.2项目目标建立车辆从购置到报废的全流程管理体系实现用车申请、调度、监控、结算的闭环管理通过数据分析优化车辆使用效率降低车辆运维成本20%以上1.3用户角色矩阵┌──────────────┬─────────────────────────────┬──────────────
  • 行业资讯
  • 来源:源码码网
  • 编辑:源码码网
  • 时间:2026-01-09 11:11
  • 阅读:148
  • 智慧农业/渔业物联网系统需求文档
  • 智慧农业/渔业物联网系统需求文档
  • 智慧农业/渔业物联网系统需求文档文档版本: V1.0项目目标: 构建一个集环境智能监测、设备自动化控制、生长模型分析、溯源管理与远程指挥于一体的综合物联网管理平台,实现降本增效、提质增产、风险预警与品牌增值。1.系统总体概述1.1核心价值: 数据驱动决策,解放人力,实现农业/渔业生产的精准化、自动化与智能化。1.2用户角色:生产员/养殖员: 现场巡视、接收告警、执行设备手动控制、查看实时环境
  • 行业资讯
  • 来源:源码码网
  • 编辑:源码码网
  • 时间:2026-01-09 11:04
  • 阅读:63
  • 程序员AI编程工具推荐
  • 程序员AI编程工具推荐
  • AI编程工具是当前开发者的“副驾驶”,能够极大提升开发效率。以下我将从通用型、代码专用型、垂直领域型以及开源/自部署型几个维度为您分类推荐,并附上它们的核心特点和适用场景,帮助您选择。一、通用型AI对话助手(编程是核心能力之一)这类工具本质是“更懂代码的ChatGPT”,适合处理广泛的编程问题、解释代码、生成文档等。ChatGPT(GPT-4/4o)简介:行业标杆,尤其在GPT-4版本下,代码理解和生成能力极强。优点:上下文能力强,
  • 源码教程
  • 来源:源码码网
  • 编辑:源码码网
  • 时间:2026-01-09 10:56
  • 阅读:89
  • 中医考证在线学习小程序系统需求文档
  • 中医考证在线学习小程序系统需求文档
  • 中医考证在线学习小程序系统需求文档文档版本: V1.0目标用户: 中医执业医师、助理医师、确有专长、师承等考证学员核心价值: 利用移动化、碎片化、智能化工具,提升学习效率与考试通过率。1.项目概述1.1项目目标开发一款专为中医考证学员设计的微信小程序,提供从课程学习、题库练习、考点记忆、模考冲刺到学习社区的一站式闭环学习体验。旨在帮助学员充分利用碎片时间,系统化、高效地备考。1.2用户角色学员(主要用
  • 行业资讯
  • 来源:源码码网
  • 编辑:源码码网
  • 时间:2026-01-09 10:53
  • 阅读:23
联系客服
源码代售 源码咨询 技术开发 联系客服
029-84538663
手机版

扫一扫进手机版
返回顶部