接着上一个文章,本文将继续学习类中其它的特性,包括静态成员数据和静态成员函数,构造函数。
1.首先介绍一下静态数据成员。它是类中比较特殊的一个数据,所有的类对象都共有一个,所以一定不要在类内部对静态成员变量进行初始化。你想啊,要是每产生一个对象就对静态成员变量初始化一次,那所有的对象还怎么共用它啊,那静态成员变量也就没什么意义的,因为它它的特性就是让所有的对象都共用。总而言之,初始化静态成员变量一定要放在类外部,不懂的看代码。
2.构造函数,这里简单提一下。它就是和类同名的函数,在创建对象的时候默认自动调用同名的构造函数对类内部的成员函数进行初始化。
#include<iostream>
using namespace std;
class CTest {
public:
CTest(int a, int b, int c, int d) {//构造函数
i = a;
j = b;
x = c;
y = d;
}
void display() {
cout << i << j << x << y << endl;
}
private:
int i, j;
static int x, y;//定义静态数据成员
};
//静态成员定义性说明,只能在类外进行初始化
int CTest::x = 0;
int CTest::y = 0;
int main() {
CTest obj(10, 20, 30, 40);//在创建对象的时候自动调用构造函数进行初始化
obj.display();
CTest obj1(100, 200,300,400);
obj1.display();
return 0;
}
3.接下来,再举个共用静态成员变量的例子:
#include<iostream>
using namespace std;
class CTest {
public:
CTest(int x = 0) {//与类同名的构造函数
i = x;
icount++;
}
void display() {
cout << "x=" << i << ",icount=" << icount << endl;
}
private:
int i;
static int icount;
};
//类外对静态成员变量进行初始化
int CTest::icount = 0;
int main() {
CTest obj[100];
CTest obj1[5];
obj1->display();
return 0;
}
上面icount为静态成员变量,而创建对象时,使用了对象数组,obj[100] obj1[5],也就是说一共有105个对象,每个对象在初始化都自动调用构造函数,所以icount被加了105次,这样静态成员变量是不是就很好理解了。
4.静态成员函数。
静态成员函数体内部只能使用静态成员变量,如果要使用其它的,就需要加上对象.的形式来说明。
可以通过类::静态成员函数的形式来调用它
看下面代码,猜一猜输出什么
#include<iostream>
using namespace std;
class CTest {
public:
CTest(int a) {
x = a;
y += x;
}
static void display(CTest obj) {
//静态成员函数里必须是静态成员变量,如果出现非静态成员变量,需要通过对象.说明
cout << "x=" << obj.x << ",y=" << y << endl;
}
private:
int x;
static int y;
};
//类外对静态成员进行初始化
int CTest::y = 10;
int main() {
CTest obj1(5), obj2(10);
//通过类名访问静态成员函数
CTest::display(obj1);
CTest::display(obj2);
return 0;
}
为什么两次都输出y = 25?思考一下啊大家!这个问题也很简单,是不是和上面的共用静态成员变量一样对吧!就是10 + 5 + 10 = 25。我困了,先写到这,下次继续写构造函数、析构函数!
到了这里想必大家对静态成员变量和静态成员函数的使用有了一个简单的了解。
多自己写点总结,多思考有助于自己提升!!加油!!!