1.C++编程简介推荐书籍
- 《C++ Primer第五版》
- 《Effective C++》
- 《C++标准库》
- 《STL源码剖析》

文章插图
自己声明的头文件用"",标准库头文件用<>

文章插图
C++和C简单程序的不同写法:

文章插图
Header头文件的防卫式声明:
#ifndef __COMPLEX__用来判断是否定义过 complex.h头文件,如果没有定义过则用#define __COMPLEX__定义, #endif表示判断结束 。
文章插图
头文件的布局与声明:

文章插图

文章插图
类模板用于对象需要不同类型的参数的时候,其中类里面形参和实参都要写成
T,对象声明时要加上参数的类型:
文章插图
3.构造函数inline可以让程序执行变快,函数在本体内定义,就自动成为inline,如果在外面定义就不是inline,但可以加上inline声明他是inline,但到底是不是inline是由编译器决定的,如果函数太复杂就不会是inline 。

文章插图
在类中,数据都应该被定义成私有的(private),私有变量不可以被对象取出,除非变量是共有的(public) 。private和public可以交叉着写,不用写完全部的public再写private 。

文章插图
构造函数可以指定默认参数,同时切记构造函数前面没有返回值类型,下图中是构造函数的特殊语法用来初始化,如果将参数放到括号里面就是变量初始化后的赋值阶段了,效率会低 。
不带指针的类多半不用写析构 。

文章插图
重载通常和构造函数一起使用,在函数编译后,函数名字其实是不同的 。函数有了默认值,也可以去写重载函数,但是对于图中右边的c1和c2,使用左边的1和2都是可以的,所以对于图中情况不行 。

文章插图
4.参数传递与返回值构造函数放在private里以后就不能在类外创建对象,但是这种写法通常用在单例模式Singleton中:

文章插图

文章插图
函数右边加上const说明对函数的操作并不会改变数据,于是这样不会改变数据的函数通常会在函数名右边加上const 。
对象定义时前面加上const说明对象是不可以被改变的,如果函数不写const,就存在可能会更改对象的可能性(更改的话会报错),这样就和对象的定义矛盾,因此写上const更为周全 。

文章插图
传引用相当于传指针,大多数情况下希冀传参是引用,如果不希望传入参数被修改,就在类型后面加上&:

文章插图
返回值和返回引用相比,尽量返回引用,同样在类型后面加上&:

文章插图
通过声明友元可以获得类中private变量的值,但是这样的话会打破面向对象的封装性,其实也可以不写友元,通过函数来获取到,但是由于使用了函数效率会变低 。

文章插图
同一class定义出来的各个对象之间互为友元:

文章插图
在下面图片中,ths指针指向的的re和im会被改变,而r的re和im不会被改变,所以传入的r引用前加了const 。如果__doapl函数内写的是
c = ths->re + r.re;,那么就不能再传引用作为返回值,因为在函数结束后,c会被销毁 。
文章插图
5.操作符重载与临时对象重载的实现有两种方式,可以写成成员函数和非成员函数 。实际上所有的成员函数都自带了一个隐藏的this指针,这个指针指向调用者,谁调用我我就指向谁:

文章插图
下图中,引用用在传递函数参数和返回值的时候,左图中的
ths,传进来的是一个指针,返回的是指针所指向的值,传递者无需知道接收者以何种方式接收重载函数的返回值类型需要是complex而不能是void,因为在左边的连串赋值中,c2加完c1之和还需要传给c3加

文章插图
下图中的非成员函数重载写出了三种不同情况下的函数,对应右边的加法 。其中,非成员函数中没有this指针
非成员函数重载的返回值不能是引用,因为加法运算完成以后必须创建出来一个local object来接收,如果传引用,对象离开这个函数就死掉了,所以要利用返回值 。

文章插图
下图中,typename()表示创建临时对象,不需要给对象以名称,临时对象的生命在下一行代码就结束,右边三个对象也是临时对象 。

文章插图
下图中的取反功能两个函数,
-函数中因为创建了一个新空间存放临时对象,所以必须返回值;而上边的+ 函数什么事情都没做,所以即可以返回引用,也可以返回值 。
文章插图
下图中
<<函数把右边输出到左边cout身上,所以不能写成一个成员函数,只能写全局的cout的类型是ostream,可以传引用,但是不能加const,如果加了const表示ostream在函数里面不能改变,其实ostream在每一次输出时候都在被修改
【C++面向对象高级开发1】
cout << c1 << conj(c1);是一个连串的输出,接收c1以后还要接收conj(c1),所以返回类型是ostream,如果只有一个<<,返回类型可以实void
文章插图
6.总结
- 构造函数的初始化写法;
- 函数该不该写const
- past by refrence 还是 past by value
- 数据应该是private,而函数应该是public的
- 春季老年人吃什么养肝?土豆、米饭换着吃
- 三八妇女节节日祝福分享 三八妇女节节日语录
- 老人谨慎!选好你的“第三只脚”
- 校方进行了深刻的反思 青岛一大学生坠亡校方整改校规
- 脸皮厚的人长寿!有这特征的老人最长寿
- 长寿秘诀:记住这10大妙招 100%增寿
- 春季老年人心血管病高发 3条保命要诀
- 眼睛花不花要看四十八 老年人怎样延缓老花眼
- 香槟然能防治老年痴呆症? 一天三杯它人到90不痴呆
- 老人手抖的原因 为什么老人手会抖
