读书笔记_Effective_C++_条款二十四: 若所有参数皆需类型转换,请为此采用non-member函数
class A
{
private:
int a;
public:
A(int x) :a(x){}
A operator*(const A& x)
{
return A(a*x.a);
}
}; int main()
{
A a();
A b = a*a;//没有问题
A b = a * ;//由于构造函数没有explicit,这里隐式转换了,也没有问题
A b = * a;//出问题了
}
老师讲过,一种是类的member函数,一种是non-member函数,
但我们为了封装性,尽量不适用friend,我们可以通过修改类的接口来使用数据
class A
{
private:
int a;
public:
A(int x) :a(x){}
int get_a()const { return a; }
void display()
{
cout << a << endl;
}
}; const A operator*(const A& a, const A& b)//注意这里写了const
{
return A(a.get_a()*b.get_a());
}
读书笔记_Effective_C++_条款二十四: 若所有参数皆需类型转换,请为此采用non-member函数的更多相关文章
- 读书笔记_Effective_C++_条款二十九:为“异常安全”而努力是值得的
		
还是举书上的例子: void PrettyMenu::changeBackground(std::istream& imgSrc) { lock(&mutex); delete bgI ...
 - 读书笔记_Effective_C++_条款三十四:区分接口继承和实现继承
		
这个条款书上内容说的篇幅比较多,但其实思想并不复杂.只要能理解三句话即可,第一句话是:纯虚函数只继承接口:第二句话是:虚函数既继承接口,也提供了一份默认实现:第三句话是:普通函数既继承接口,也强制继承 ...
 - 读书笔记_Effective_C++_条款二十八:避免返回handlers指向对象内部成分
		
举个例子: class Student { private: int ID; string name; public: string& GetName() { return name; } } ...
 - 读书笔记_Effective_C++_条款二十六:尽可能延后变量定义式的出现时间
		
这个条款从字面意思还是很好理解的,就是在使用这个变量前才去定义,而不是很早就定义了它,而在很后面的时候才去使用.这个条款只适用于对变量声明位置没有要求的语言,比如C++.对于像C或者一些脚本语言,语法 ...
 - 读书笔记_Effective_C++_条款二十五: 考虑写出一个不抛出异常的swap函数
		
在之前的理论上调用对象的operator=是这样做的 void swap(A& x) { std::swap(a, x.a); } A& operator=(const A& ...
 - 读书笔记_Effective_C++_条款二十二:将成员变量声明为private
		
1.格式统一 在调用的时候,不会去想有没有(),一律是有get(),或者set()之类的. 2.封装 能直接访问得越少,表明封装性越高, 封装性越高,我们的顾虑就少了, 例如:我们a.data*0.9 ...
 - 读书笔记_Effective_C++_条款三十:了解inline的里里外外
		
学过基本程序课的同学都知道,inline是内联的关键字,它可以建议编译器将函数的每一个调用都用函数本体替换.这是一种以空间换时间的做法.把每一次调用都用本体替换,无疑会使代码膨胀,但可以节省函数调用的 ...
 - 读书笔记_Effective_C++_条款三十二:确定你的public继承继承塑模出is-a关系
		
这一条款是说的是公有继承的逻辑,如果使用继承,而且继承是公有继承的话,一定要确保子类是一种父类(is-a关系).这种逻辑可能与生活中的常理不相符,比如企鹅是生蛋的,所有企鹅是鸟类的一种,直观来看,我们 ...
 - 读书笔记_Effective_C++_条款三十九:明智而审慎地使用private继承
		
private继承的意义在于“be implemented in turns of”,这个与上一条款中说的复合模型的第二层含义是相同的,这也意味着通常我们可以在这两种设计方法之间转换,但书上还是更提倡 ...
 
随机推荐
- php 编译安装curl 时候出现问题
			
/usr/bin/ld: ext/curl/.libs/interface.o: undefined reference to symbol 'CRYPTO_set_id_callback@@OPEN ...
 - iOS开发——C篇&动态内存分配
			
再C语言中关于内存是一个很重要的知识点,所以今天我就从c语言的内存分配开始为大家解析一下C语言再iOS开发中非常重要的一些知识. 1:malloc函数的介绍 C语言中开辟内存空间:malloc函数 再 ...
 - sublime 使用快捷记录
			
1.sublime 中有一个htmlprettify 插件 这个插件 可以用来格式化 html css js 使我们的代码看着比较美观 ctrl + shift + h 这个快捷方式是美化代码间距的 ...
 - 递归目录的shell脚本
			
#! /bin/sh # 在其他目录运行时一定要加上这样的语句 # 尤其是配置在crontab里自动运行 cd `` #定义数据别名 alias statdb="/usr/local/mys ...
 - 编程的宗派(OOP与FP孰优孰劣)--王垠
			
编程的宗派 总是有人喜欢争论这类问题,到底是"函数式编程"(FP)好,还是"面向对象编程"(OOP)好.既然出了两个帮派,就有人积极地做它们的帮众,互相唾骂和鄙 ...
 - QT文档如何使用
			
http://blog.csdn.net/chenlong12580/article/details/7389588
 - BZOJ3397: [Usaco2009 Feb]Surround the Islands 环岛篱笆
			
3397: [Usaco2009 Feb]Surround the Islands 环岛篱笆 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 11 So ...
 - 【android】adb连接几个常见问题(遇到再新增)
			
不知道为什么,每次连接手机,都提示 adb server is out of date,偶尔也会提示not found 每次去百度,都好多方法---终于有一种方法非常靠谱,遂,记录之--- 问题一:o ...
 - cocos2d-x 找不到资源文件问题
			
问题描述: 在项目中引用到了图片,但是运行时报错: Unhandled exception at 0x001049DE in hello.exe: 0xC0000005: Access violati ...
 - 基于HTML5 Canvas的饼状图表实现教程
			
昨天我们分享了一款基于HTML5的线性图表应用,效果非常不错,可以看在线DEMO或者实现教程.今天我们继续来分享一款基于HTML5的网页图表,它也是利用Canvas绘制的,但是和前面不同的是,这款图表 ...