CPP学习之——静态成员函数(17.3)

一 概述

静态成员函数与静态成员变量是一样的,它们不单属于一个对象,而是属于整个类

二 示例演示及结果

2.1 代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<iostream>
using namespace std;
class A
{
private:
static int n;
public:
void static show()
{
cout << A::n;
n++;
}
};
int A::n = 0;
int main() {
for (int i = 0; i < 5; i++)
{
A::show();
cout << endl;
}
return 0;
}

2.2 输出结果

1
2
3
4
5
0
1
2
3
4

2.3 说明

  • 从上面的例子中,我们看出公有的静态成员函数show()在未创建对象时也可以使用,它的调用与静态成员变量一样
  • 注意:静态成员函数由于是属于整个类的,所以它不能访问某个对象的成员变量,因为它没有指向该对象的this指针。不过它可以访问该类的静态成员变量

三 示例演示及结果二

3.1 代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include<iostream>
using namespace std;
class A {

private:
static int n;
int m;
public:
A(){m=0;}
void static show(){cout << A::n;n++;}
};
class B:public A{};
int A::n = 0;
int main() {

A a,b,c;
a.show();
b.show();
c.show();
A::show();
B::show();
return 0;
}

3.2 输出结果

1
01234

3.3 说明

  • 我们也可以通过对象来访问静态成员函数
  • 要使用类成员名限定来访问静态成员,不要使用对象名,因为静态成员是类的成员而不是对象的成员
  • 静态成员可以被继承,基类和派生类对象都可以共享该静态成员

四 示例演示及结果三

4.1 代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<iostream>
using namespace std;
class A {
private:
static int n;
int m;
public:
A(){m=0;}
void static show(){cout << A::n;n++;}
void get(){cout<<n;}
};
class B:public A{};
int A::n = 0;
int main() {
A::show();
A a;
a.get();
B::show();
return 0;
}

4.2 输出结果

1
011

4.3 说明

  • 类中任何成员函数都可以访问静态成员,但是静态成员函数不能直接访问非静态成员,只能通过对象名访问对象的非静态成员。这是因为静态成员函数是属于整个类的,没有特指向某个对象的this指针
  • 特别注意:静态成员函数不能被说明为虚函数