complex.h
1、防卫式声明
#ifndef COMPLEX//告诉编译器曾经没有
#define COMPLEX
。。。。
#endif
作用:发展一个复数,把它放在头文件中,因为很多程序要用到这个头文件,include”complex”,当第一次include这个头文件后,编译器就会进入头文件中,并且定义_COMPLEX_,这个就定义好了,在第二次include时,就不需要再进入头文件定义了,因为编译器已经有_COMPLEX_了,避免了重复的include含入 的动作。
Header(头文件)布局
#ifnedf _COMPLEX_
#define _COMPLEX_
//-----------------第一部分:前置声明-----------------
#include<cmath>
class ostream;
class complex;
complex&
_doapl(complex* ths,const complex& r);
//----------------第二部分:类声明----------------------
class complex{
....
};
//----------------第三部分:类定义-----------------------
complex::function....
#endif
2、inline函数
在类内直接声明定义的函数不用加inline就是内联函数了,只是如果函数在类内只是声明,在外面定义,为了把他写成内联函数,需要加inline关键字。
3、访问级别(access level)
public、private、protected
private:数据的部分,需要封装,把数据很好的包裹起来。默认
public:大部分函数,需要被使用
protected:
4、构造函数(constructor)
当你需要创建一个对象,有一个函数会自动被调用起来
特点:
(1)构造函数名称必须与类的名称一致
(2)没有返回类型,因为构造函数就是为了创建对象,不能改变,所以不必谢,也就没有返回值。
注意:complex (double r=0;double i = 0):re®,im(i)//这一行只有构造函数有,叫做初值列,初始列,把r设给re,i设给im,其实放到本体上也行,为什么呢?简单讲就是一个变量数值的设定两阶段,初始化和赋值,以上是初始化,这样做就是为了直接初始化,如果放在本体中,其实是有点初始化晚了。就是效率上会好一些。
{…}
(3)不可能在类中去调用构造函数。对应的也有一个析构函数,class有带指针的和不带指针的,不带指针的就不需要析构函数
(4)构造函数可以有很多个overlording(重载),但是重载的函数不能在函数名后面加const,这样就冲突了,为什么能重载?在类中函数名重载,但是在编译器看来,经过编译之后的结果其实是不同的函数的。注意:在编写函数重载时,需要注意函数在调用的时候不能有冲突,使得编译器无法判断。
(5)什么情况可以啊构造函数放在private区中?
有一些设计模式可以放在里面,但目前为止不要放。
5、const member function(常量成员函数)
double real() const{};//const放在函数后面。
A:有什么用呢?
Q:当要打印一些东西的时候,里面的东西是不改变的,所以可以加const作为常量成员函数。
6、参数传递:pass by value & pass by reference(to const)
const reference(例如:const complex&):表示传入的引用是不能改的。参数传递尽量传引用,因为速度更快。
7、friend(友元)
在语言中:朋友可以来拿,指的是数据。
例如:在private中的数据不能通过外部来取,
friend complex& __doapl(complex*,const complex&);//声明
//定义
inline complex&
__doapl(complex* ths,const complex& r){
ths->re += r.re;
ths->im += r.im;
return *ths;
}
自由取得friend的private成员,这样就可以直接取得私有数据,而不用通过调用函数取得。但是friend也在一定程度上打破了C++的封装,所以可以进行选择,选用朋友这种方式或者通过调用函数。
8、相同class 的各个object互为friend(友元)
也就是例如一个student的类,其中的成员数据包括姓名,学号等。
创建了三个对象,s1,s2,s3。s3中的成员函数可以直接调用s2中的私有的成员数据。为什么呢?
答案也就是这一个小标题的说法。
9、class body外的各种定义
什么情况用pass by reference
什么情况用return by reference
注意:返回引用的时候,函数中的返回的引用在程序完成后仍然存在才行,不然得到的是坏东西。