勿在浮沙筑高台

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

<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>

最新文章

  1. Spring Boot项目中使用jdbctemplate 操作MYSQL数据库
  2. C#多线程学习
  3. Web Services 中XML、SOAP和WSDL的一些必要知识
  4. POJ 1759
  5. python27读书笔记0.2
  6. HBase Split
  7. SQL Server 后续去除功能汇总
  8. flex中form表单中子元素之间的距离控制
  9. shader之半兰伯特漫反射
  10. mysql在win10下的卸载
  11. Java【第一篇】基本语法之--关键字、标识符、变量
  12. @无痕客 https://www.cnblogs.com/wuhenke/archive/2012/12/24/2830530.html 通篇引用
  13. IT项目管理分享7个开源项目管理工具
  14. 代码: !AJAX
  15. Android下的几种时间格式转换
  16. js中数字直接点方法会报错,如1.toString()
  17. ubuntu16.04下的htk安装编译
  18. VisualSVN server搭建装配和指定IP或域名
  19. 利用Elasticsearch搭建全球域名解析记录
  20. Java全系列帮助文档下载

热门文章

  1. CentOS 7.2部署NTP服务器实现时间同步
  2. MySql查询分页数据
  3. Systm.IO.File.cs
  4. 跨数据库查询——dblink
  5. Google Chrome浏览器安装xpath helper插件
  6. 6_4.springboot2.x数据整合springData介绍
  7. &lt;每日一题&gt;题目11:以文件夹名称作为参数,返回该文件夹下所有文件的路径
  8. linux及windows安装maven
  9. input光标使用caret-color改变颜色
  10. JavaWeb开发购物车设计总结