类的静态成员

以一个例子来解释类的静态成员的必要性,定义一个类Point,该类分为坐标x,y 和点的个数count,在主函数定义类的对象的时候,我们想每定义一个类,就是得count加1,从而达到记录点的个数。所以可以在变量中引入static的类型,通过该类型可以保证所有该类的对象都共享该变量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include<iostream>
using namespace std;
class Point {
private:
int x, y;
static int count;
public:
//内联函数,并且同时具备含参和不含参的情况,不传入参数就是按括号内赋值,传入参数按传参赋值
Point(int x = 0, int y = 0) :x(x), y(y) { count++; }//构造函数,赋值初值为0
Point(Point& p) {//复制构造函数
x = p.x;
y = p.y;
count++;
}
~Point() { count--; }//析构函数
int getX() { return x; }
int getY() { return y; }
static void showCount() {
cout << " Object count=" << count << endl;
}
};
int Point::count = 0;//设置静态变量,可以根据创建对象的个数来改变,换言之各个对象共享这些空间
//count 也是局部变量
int main(void) {
Point a(4, 5);
cout << "Point A:" << a.getX() << "," << a.getY();
Point::showCount();
Point b;
cout << "Point B:" << b.getX() << "," << b.getY();
Point::showCount();
return 0;
}

复制构造函数

使用类型:对象之间数据的传递

1.定义对象进行复制

1
2
Point a(10,20);
Point b=a; //b的内容和a一样

2.传参

1
2
3
4
void fun1(Point p){
cout<<p.getX()<<endl;
}
调用 fun1(b);

3.传参

1
2
3
4
Point fun2(){
return Point(1,2);
}
调用 b=fun(2);

具体的代码如下

1
2
3
4
5
Point(Point& p) {//复制构造函数
x = p.x;
y = p.y;
count++;
}