勿在浮沙筑高台

革命尚未成功,同志仍需努力

<h1> Conversion Function</h1>
class Fraction
{
public:
Fraction(int n, int den = 1) : m_fenzi(n), m_fenmu(den){}
operator double() const
{
return (double)(m_fenzi/m_fenmu);
} private:
int m_fenzi; //分子
int m_fenmu; //分母 }; operator double 属于转换函数, 这里不能设定传入值和传出值 Fraction f(4,5);
double d = 4 + f;
编译器查找顺序:
1,找有没有全局函数operator+
2,找Faction有没有operator double 其中double还可以有:
String,int ,float 所以这里的转换并不局限于任何基本类型, 任何type只要之前出现过,编译器就会认得该type. <h1> non-explicit-one-argument ctor</h1>
之前的例子: class Fraction
{
public:
Fraction(int n, int den = 1) : m_fenzi(n), m_fenmu(den){}
Fraction operator +(const Fraction& f) const
{
return ...;
} /*
operator double() const
{
return (double)(m_fenzi/m_fenmu);
}
*/
private:
int m_fenzi; //分子
int m_fenmu; //分母 }; //使用:
Faction f(3,5);
Faction d = f + 4; //? Faction d = f + 4
编译器查找顺序:
1, Fraction 有没有operator+(int)
2, 调用 non-explicit ctor 将 4 转为 Fraction(4) , 然后调用operator+(Fraction) 但:
当加入operator double()的时候在调用实例:
Faction d = f + 4
就会发生二义性.
1, 将4转为Fraction(4)
2, 将f转为double
所以这里将会出错. <h1> explicit-one-argument ctor</h1>
class Fraction
{
public:
explicit Fraction(int n, int den = 1) : m_fenzi(n), m_fenmu(den){}
Fraction operator +(const Fraction& f) const
{
return ...;
} /*
operator double() const
{
return (double)(m_fenzi/m_fenmu);
}
*/
private:
int m_fenzi; //分子
int m_fenmu; //分母 }; //使用:
Faction f(3,5);
Faction d = f + 4; //? 这里explicit将会限制编译器,不要随便转化. <h1>pointer-like classes </h1>智能指针
迭代器 操作符重载:
operator*()
operator->()
operator++()
operator--()
让类更像指针一样操作

//============================================================================================//
这周深刻了解了包含头文件的< >与" "的区别
<span style="font-family: 微软雅黑; font-size: 14px; line-height: 21px; widows: auto;">     区别在编译器在搜索头文件时的顺序不同。</span><div style="font-family: 微软雅黑; font-size: 14px; line-height: 21px; widows: auto;">    </div><div style="font-family: 微软雅黑; font-size: 14px; line-height: 21px; widows: auto;">    < >表示从系统目录下开始搜索,然后再搜索PATH环境变量所列出的目录,不搜索当前目录;<div style="background-color: inherit;">    <br style="background-color: inherit;" /></div><div style="background-color: inherit;">    " "表示从当前目录搜索,然后是系统目录和PATH环境变量所列出的目录。<br style="background-color: inherit;" /></div><div style="background-color: inherit;"><br style="background-color: inherit;" /></div><div style="background-color: inherit;">    所以如果我们知道头文件在系统目录下,就可以直接用< >  , 以加快搜索速度。</div></div>

C++面向对象高级编程(下)第一周-Geekband的更多相关文章

  1. C++面向对象高级编程(五)类与类之间的关系

    技术在于交流.沟通,转载请注明出处并保持作品的完整性. 本节主要介绍一下类与类之间的关系,也就是面向对象编程先介绍两个术语 Object Oriented Programming   OOP面向对象编 ...

  2. C++面向对象高级编程(九)Reference与重载operator new和operator delete

    摘要: 技术在于交流.沟通,转载请注明出处并保持作品的完整性. 一 Reference 引用:之前提及过,他的主要作用就是取别名,与指针很相似,实现也是基于指针. 1.引用必须有初值,且不能引用nul ...

  3. C++面向对象高级编程(八)模板

    技术在于交流.沟通,转载请注明出处并保持作品的完整性. 这节课主要讲模板的使用,之前我们谈到过函数模板与类模板 (C++面向对象高级编程(四)基础篇)这里不再说明 1.成员模板 成员模板:参数为tem ...

  4. C++面向对象高级编程(三)基础篇

    技术在于交流.沟通,转载请注明出处并保持作品的完整性. 概要 一.拷贝构造 二.拷贝赋值 三.重写操作符 四.生命周期 本节主要介绍 Big Three 即析构函数,拷贝构造函数,赋值拷贝函数,前面主 ...

  5. C++面向对象高级编程(一)基础篇

    技术在于交流.沟通,转载请注明出处并保持作品的完整性. 概要: 知识点1 构造函数与析构函数 知识点2 参数与返回值 知识点3 const 知识点4 函数重载(要与重写区分开) 知识点5 友元 先以C ...

  6. Java面向对象 网络编程 下

    Java面向对象 网络编程  下 知识概要:                   (1)Tcp 练习 (2)客户端向服务端上传一个图片. (3) 请求登陆 (4)url 需求:上传图片. 客户端:   ...

  7. 20165232 2017-2018-2《Java程序设计》结对编程一 第一周总结

    20165232 2017-2018-2<Java程序设计>结对编程一 第一周总结 结对对象 20165219王彦博 20165232何彦达 需求分析 实现一个程序,要求: 1 支持整数运 ...

  8. 20165205 2017-2018-2《Java程序设计》结对编程一 第一周总结

    20165205 2017-2018-2<Java程序设计>结对编程一 第一周总结 需求分析 对输入的算式进行计算,要求满足一下条件: 支持整数运算,如2+5,47+7865. 支持多运算 ...

  9. C++面向对象高级编程(七)point-like classes和function-like classes

    技术在于交流.沟通,转载请注明出处并保持作品的完整性. 1.pointer-like class 类设计成指针那样,可以当做指针来用,指针有两个常用操作符(*和->),所以我们必须重载这两个操作 ...

  10. C++面向对象高级编程(六)转换函数与non-explicit one argument ctor

    技术在于交流.沟通,转载请注明出处并保持作品的完整性. 1.conversion function 转换函数 //1.转换函数 //conversion function //只要你认为合理 你可以任 ...

随机推荐

  1. DEV的GridControl控件的选中列属性设置高光

    设置Run Designer=>Views=> OptionsSelection下面的: EnableAppearanceFocusedCell = False,//鼠标移开,失去焦点,仍 ...

  2. PHP算法之按奇偶排序数组

    给定一个非负整数数组 A,返回一个数组,在该数组中, A 的所有偶数元素之后跟着所有奇数元素. 你可以返回满足此条件的任何数组作为答案. 示例: 输入:[3,1,2,4]输出:[2,4,3,1]输出 ...

  3. [笔记]Laravel TDD 胡乱记录

    TDD: 测试驱动开发(Test-Driven Development),TDD的原理是在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么产品代码. -- 载自TDD百度百科 参考 ...

  4. git使用过程中问题

    git提交文件命令顺序 fetch merge add commit pull push 取消已add文件 git reset HEAD 文件名 覆盖本地文件 git checkout 文件名 $ g ...

  5. PHP MVC运用

    php中的MVC模式运用 首先我来举个例子: 一个简单的文章显示系统 简单期间,我们假定这个文章系统是只读的,也就是说这个例子将不涉及文章的发布,现在开始了. 由于只涉及数据库的读取,所以我定义了两个 ...

  6. duilib库分析3.DUILibxml配置

    我这里是借用网友colin3dmax整理的关于duilib的分析哈,感谢他的分享,我觉得很有必要贴出来让大家都学习观摩下 DUILibxml配置项根节点        子类      属性       ...

  7. 应用程序正常初始化(0xc0150002)失败的终极解决方案

    转自VC错误:http://www.vcerror.com/?p=62 最近做一个项目写了一个VC6下的MFC程序,结果传到别人的机子上(WIN7)出现了应用程序正常初始化(0xc0150002)失败 ...

  8. python笔记四

    #!/usr/bin/env python3 from datetime import datetime, timedelta # datetime是模块,datetime模块还包含一个datetim ...

  9. python 对excel操作

    在python中,对excel表格读,写,追加数据,用以下三个模块:1.wlrd 读取excel表中的数据2.xlwt 创建一个全新的excel文件,然后对这个文件进行写入内容以及保存.3.xluti ...

  10. <scrapy爬虫>scrapy命令行操作

    1.mysql数据库 2.mongoDB数据库 3.redis数据库 1.创建项目 scrapy startproject myproject cd myproject 2.创建爬虫 scrapy g ...