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

网站诊断方案做网站如何防止被抄袭

网站诊断方案,做网站如何防止被抄袭,网络营销的主要形式,塘厦房价文章目录前言1.日期类的功能分析1.大致分析2.接口设计2.具体实现1.日期类的成员函数和成员变量2.初始化(构造函数#xff09;3.对日期进行天数推算4.比较相关的运算符重载5.前置后置自增或自减6.日期相减与流插入流提取1.日期相减2.重载流插入和流提取3.总结前言 之前介绍了C… 文章目录前言1.日期类的功能分析1.大致分析2.接口设计2.具体实现1.日期类的成员函数和成员变量2.初始化(构造函数3.对日期进行天数推算4.比较相关的运算符重载5.前置后置自增或自减6.日期相减与流插入流提取1.日期相减2.重载流插入和流提取3.总结前言 之前介绍了C面向对象的初阶知识为了更理解相关知识加深印象我们可以先试着写个日期类来巩固所学。 1.日期类的功能分析 1.大致分析 我们写日期类之前可以先去百度看看一些简蛋的日期转化工具的大致功能从中提炼出我们自己日期类的功能。我大致将日期类分为以下功能天数转化日期(给定一日期往前推算日期或往后推算日期)两个日期减相差多少天为了用到运算符重载的知识可以进行日期的判断比较已经针对输入输出实现输入输出的运算符重载。 2.接口设计 日期类构造函数这里就不算在内了同时日期类也不设计资源申请这里就不提析构函数的实现了这里主要是围绕日期类功能的相关接口。 打印函数 void Print(); 得到月份的天数 int GetMonthDay(int year, int month); 日期天数 Date operator(int day); 日期天数 Date operator(int day); 日期-天数 Date operator-(int day); 日期-天数 Date operator-(int day); 后置 Date operator(int); 后置-- Date operator--(int); 前置 Date operator(); 前置-- Date operator--(); 赋值重载 Date operator(const Date d); 运算符重载 bool operator(const Date d); 运算符重载 bool operator(const Date d); 运算符重载 bool operator (const Date d); 运算符重载bool operator (const Date d); 运算符重载 bool operator (const Date d); !运算符重载 bool operator ! (const Date d); 日期-日期 返回天数 int operator-(const Date d); 流插入 friend ostream operator (ostream out, const Date d); 流提取friend istream operator(istream in, Date d); 日期类的成员这都很好确定大致就3个year month day. 2.具体实现 1.日期类的成员函数和成员变量 class Date { public://打印函数void Print();//得到月份的天数int GetMonthDay(int year, int month);//全缺省构造函数Date(int year1, int month1, int day1);//拷贝构造Date(const Date d);// 析构函数~Date(){;}// 日期天数Date operator(int day);// 日期天数Date operator(int day);// 日期-天数Date operator-(int day);// 日期-天数Date operator-(int day);// 后置Date operator(int);// 后置--Date operator--(int);//前置Date operator();// 前置--Date operator--();//赋值重载Date operator(const Date d);// 运算符重载bool operator(const Date d);// 运算符重载bool operator(const Date d);// 运算符重载bool operator (const Date d);// 运算符重载bool operator (const Date d);// 运算符重载bool operator (const Date d);// !运算符重载bool operator ! (const Date d);// 日期-日期 返回天数int operator-(const Date d);//流插入friend ostream operator (ostream out, const Date d);//流提取friend istream operator(istream in, Date d);private:int _year;int _month;int _day; }; 其实这个日期类成员全凭借个人意愿有些功能如果没想好可以边写边想或者后序加上也行。不过最好还是写代码之前提前想好这样就可以专心写代码实现功能了。 2.初始化(构造函数 之前我们知道构造函数就是用来初始化的这里我就实现了两个构造一个直接构造另一个是拷贝构造。这里要注意一点对于用户输入的日期要进行判断不能使用非法的值用来构造。其实这里的拷贝构造我们不现实也可可以使用默认生成的因为日期类不涉及一些资源的申请。 Date::Date(int year1,int month1,int day1) {if(month 0 month 13 (day 0 dayGetMonthDay(year, month))){ _year year;_month month;_day day;}else{cout 非法初始化 endl;}}Date::Date(const Date d) {_year d._year;_month d._month;_day d._day; }我们可以先写个Getmonthday函数用来获取每一年每个月的天数这里要注意对闰年的判断。 int Date:: GetMonthDay(int year, int month) {int MonthDay[13] { 0,31,28,31,30,31,30,31,31,30,31,30,31 };if(month 2 ((year % 4 0 year % 100 ! 0) || (year % 400) 0)){return 29;}else{return MonthDay[month];} }这里只用对2月进行单独处理即可。当然也可以加入一些对输入年份和月份判断限制。我这里就没有那么严谨进行限制判断。 3.对日期进行天数推算 这里就需要用到了运算符重载的知识了天数推算就是日期类对象进行天数的相加或者相减。为了支持这种相减相加的操作只能对 -运算符进行重载了。 关于日期天数加键的逻辑分析 与- Date Date::operator(int day) { //复用-运算符重载if (day 0){*this - -day;}_day day;while (_day GetMonthDay(_year, _month)){_day - GetMonthDay(_year, _month);_month;if (_month 13){_month 1;_year;}}return *this; }Date Date:: operator-(int day) { //复用运算符重载if (day 0){*this -day;}_day - day;while (_day 0){_month--;if (_month 0){_month 12;_year--;}_day GetMonthDay(_year, _month);}return *this; } 这里使用引用返回是为了更加符合运算符特性比如:b(ac),如果没有返回值的话出现例子种的场景显然是有问题的。代码中还涉及复用的技巧对于为负值的天数相加时可以复用相减的运算符重载就是减去负day。处理相减时也可以这样处理如果day是负数就是加上负day。 与- Date Date::operator(int day) { //复用 //tem是临时变量所以不用引用返回Date tem *this;tem day;return tem; }Date Date::operator-(int day) {Date tem *this;tem day;return tem; }这里要提一点 a1 a的值肯定是改变了 a1 这个a的值肯定是没有改变的。基于此实现- 运算符重载的时候先创建一个临时变量为了不该变原来对象中的数据。因为是在函数体内创建的临时变量实用这里就使用的传值返回。当然这个返回值的也是为了符合运算符的特性比如ab-1因为之前实现了和-这里对临时变量直接复用即可。 这里补充一个运算符重载赋值运算符重载 Date Date::operator(const Date d) { if (this ! d){_year d._year;_month d._month;_day d._day;}return *this; }这里实现的时候多加了一个判断自己对自己赋值的时候不用处理减少不必要的程序系统开销。为了支持运算符连续赋值的特性这里采用的也是引用返回。 4.比较相关的运算符重载 之前我们实现- 运算符重载的时候使用了代码复用这里也可以代码复用我们可以先实现两个运算符重载其他的都可以复用我选取的和其他都是复用这两个。 bool Date::operator(const Date d) {return _year d._year _month d._month _day d._day; }bool Date::operator(const Date d) {if (_year d._year){return true;}else if (_year d._year _month d._month){return true;}else if (_year d._year _month d._month _day d._day){return true;}else{return false;} }bool Date::operator(const Date d) { //复用return *this d || *this d; }bool Date::operator(const Date d) {return !((*this ) d); }bool Date::operator(const Date d) {return *this d || *this d; }bool Date::operator!(const Date d) {return !(*this d); }当我们使用了和之后如果两个日期类对象是小于或者等于就实现了如果不是就是大于如果大于或者等于就实现了如果不是 就是这样一来代码的复用就实现了。代码复用算是一个编程小技巧尽可能的多用。 5.前置后置自增或自减 前置 我们知道改变自己后置不改变自己。同时为了保持原本运算符的连续性运算符重载是需要有返回值的这点上面就提到过返回值类型根据运算符特性特性来决定如果是改变自己采用引用返回即可其他情况就采用采用传值返回。 前置 代码示例 Date Date::operator() {//复用*this 1;return *this; }后置 代码示例 //后置 Date Date::operator(int) {Date tmp(*this);tmp 1;return tmp; } 这里要提一下C中为了区分前置和后置 ,后置多了一个int 参数 主要是为了构成函数重载用于区分这两个运算符重载实际使用的时候不用传参。同理后置--的时候也需要这样处理。 前置-- 代码示例 //前置-- Date Date:: operator--() {*this - 1;return *this; }后置-- 代码示例 //后置-- Date Date::operator--(int) {Date tem(*this);tem - 1;return tem; } 当然这里实现的时候也是代码复用 6.日期相减与流插入流提取 1.日期相减 日期相减我们可以引入一个计数变量用于计算两个日期的差值我们先选出较小的日期进行前置直到和较大的日期相等为止每自增一次就计数一次。这样就可以很好的计算出日期差值。 代码示例 int Date::operator-(const Date d) {Date max(*this);Date min(d);int flag 1;if (max min){max d;min *this;flag -1;}//复用!int day 0;while (max ! min){min;day;}return flag * day; }可能前者的日期比后者的大所以引入一个变量flag标记一下用于确定结果的正负值。这里还是涉及到代码的复用。 2.重载流插入和流提取 我们刚接触c的时候可能觉得cout和cin很神奇能够自动识别数据类型通过之前的学习我们不难猜出cont和cin是使用了运算符重载和函数重载能够自动识别数据类型。我们可以去c官网查一下cout和cin. 我们不难看出cin 是iostrem头文件中的一个对象它的类型是istream,cout也是iostrem头文件中的一个对象它的类型是ostream。因为c的官网库中对内置类型进行函数重载和运算符重载了但是没有对日期类进行重载我们日期类无法直接cout Date 或者cin Date 我们不能动官方库只能直接对是进行重载如果将其封装成Date类的成员函数就会发生如下问题 这样写用倒是能用 但是过于奇怪了。为了更加和库中的使用方法保持一致我们将这个函数写成全局函数写成全局函数后就有个问题不能访问类中的成员为了能够访问类中成员我们必须得使用friend将这个全局函数设置成类中的友元函数来处理。同理cin也是这样处理。 //为了能沟连续输出或输入采用引用作为返回值ostream operator ( ostream out, const Date d) {out d._year 年 d._month 月 d._day 日 endl;return out; }istream operator( istream in, Date d) {in d._year d._month d._day;return in;}3.总结 日期类实现难点在于理清加减天数的逻辑这点是比较重要的。理清后后面的代码就很好写了。为了得到每个月的天数这个功能是频繁使用的我们可以将其封装成一个函数这样代码逻辑更加清晰。 编程技巧:学会代码的复用这样可以使得代码更加简洁同时对于一些不用改变成员变量的函数形参可以使用const修饰尽可能使用const是个好习惯。比如上述的日期比较函数不仅可以使用const修饰还可以让其成为const成员函数专门用于修饰*this。因为这种只需要读权限即可const 对象也可以调用该成员函数。 以上内容如有问题欢迎指正谢谢
http://www.w-s-a.com/news/995453/

相关文章:

  • 个人网站制作总体设计宿迁房价2023年最新房价
  • 服装网站建设进度及实施过程马鞍山网站设计制作
  • 郑州网站优化顾问济宁网站制作
  • 网站开发简单吗网站引导页分为三个板块设计风格
  • 湖南做网站 在线磐石网络百度一下百度搜索
  • 现在建网站多少钱推广营销费
  • 联想企业网站建设的思路西安网站建设阳建
  • 网站内容 内链网站建设电话销售工作总结
  • 系统网站开发知名的摄影网站有哪些
  • 网站拍照的幕布扬中网站建设价位
  • 网站ie兼容性差西安小程序开发的公司
  • 上海网站建设培训app网站开发成本
  • 个人网站icp外贸网站开发 河南
  • 遵义建设网站无锡市规划建设局网站
  • 海外留学网站建设方案门户网站的发布特点
  • 网站建设不赚钱net112企业建站系统
  • 网站建设团队管理模板贵州省住房和城乡建设部网站
  • 曲沃网站建设网上学编程的有哪些比较好的网站
  • 厦门网站建设慕枫学做网站需要多久
  • 爱奇艺做任务领vip网站设计广告图片
  • 中科汇联网站建设手册上海公司名称注册查询网
  • 网站建设电子商务课总结和体会关于做网站书籍
  • 仪征网站建设公司哪家好简单网页制作素材图片
  • 甘肃第九建设集团公司网站潍坊个人做网站
  • 如何做后台网站的教程网站建设 关于我们
  • 极速网站建设哪家好连云港百度推广网站建设
  • 医院网站建设的目标wordpress中英文网站模板
  • 门户型网站开发难度网站导航栏有哪些
  • 推荐做任务网站软件定制开发哪家好
  • 邯郸兄弟建站第三方仓储配送公司