静态成员
1.用static声明局部静态变量。它作用范围仅限于本函数,但是它存储在静态区,函数调用结束后不消失而存储原值,在下次调用时,使用上次调用结束时的值。
2.全局数据成员会被所有类的所有对象所访问,作用范围太大,为了解决这个问题,引入静态数据成员,它可以在同类的多个对象之间所共享。它在所有对象之外单独开辟存储空间,它的空间并不随某个对象的撤销而释放。
对象数组和指针数组
假设Time是一个类
Time*pt=new Time;
这是动态建立一个对象,和数组一样的,用delete运算符释放。
Time*t=new Time[n];
delete[]t;
这是定义一个动态的对象数组。这个比静态的对象数组好一点,但是仍然是直接开辟了n个空间,还是不太好,还可以更加的合理。我们可以建立一个指针数组。
const int N=100;
Time*t[N]={NULL};//定义一个大小为N的数组,数组元素是指针,指向Time类对象的指针,并且全部初始化为null
等到使用的时候再赋值,再开辟空间,很方便。
运算符重载
1.我么已经学习过的C++的一些知识,已经有很多都涉及到了运算符重载。比如
cin>>a>>b;
cout<<a<<b;
string s1="good";
string s2="morning";
string s=s1+s2;
//这里面的>>和<<以及+都被重载了。
举一个例子。这是一个复数的例子。我们先使用成员函数来定义复数的加法。这和常规的定义一个成员函数是没有什么区别的。接下来我们定义一个函数叫 operator+().这个函数也是实现前面定义的add()函数的功能。目前为止唯一的区别是函数名换成了operator+.
接着是一个巨大的区别,也是对这里的运算符重载的点题。第一个main()函数里面就是调用的前面定义的add()函数实现的复数的加法。第二个main()函数直接写了个“+”就可以直接实现两个复数的加法。这就很强了,这让复数的加法在程序里面读起来和一般整数、浮点数的加法没有区别了。这就是运算符重载的精髓。当然后面直接调用operator+()函数也是可以的,这就是相当于调用成员函数嘛。
2.C++不允许重载的运算符只有五个。剩下的都可以重载。
运算符重载不允许改变运算符的优先级,不允许改变运算符的结合性,不允许创造新的运算符,不能改变运算符运算对象的个数,重载运算符不能有默认的参数,
3.运算符重载之后的功能应该类似于作用于标准数据类型时所实现的功能。
4.实现运算符重载的函数可以是类的成员函数,也可以是类的友元函数,只有在极少数的情况下会使用普通函数。