-
-
[分享]C++基础十一-类的特殊成员
-
发表于: 2021-9-22 15:58 7021
-
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
#include using namespace std; class CStudent
{ public: CStudent( int nID, char * szName, double nScore);
~CStudent();
int GetID() const;
static int GetTotal();
void ShowStudent();
private: const int m_nID = 0 ;
char m_szName[ 128 ] = { 0 };
double m_nScore = 0 ;
static int m_nTotal;
}; int CStudent::m_nTotal = 0 ;
CStudent::CStudent( int nID = 0 , char * szName = (char * ) "unknow" , double nScore = 0 ) :m_nID(nID), m_nScore(nScore)
{ strcpy_s(m_szName, szName);
m_nTotal + + ;
} CStudent::~CStudent() { m_nTotal - - ;
} int CStudent::GetID() const
{ return m_nID;
} int CStudent::GetTotal()
{ return m_nTotal;
} void CStudent::ShowStudent() { cout << "ID=" << m_nID << endl;
cout << "Name=" << m_szName << endl;
cout << "Score=" << m_nScore << endl;
cout << "Total=:" << m_nTotal << endl;
} int main()
{ CStudent Student;
Student.ShowStudent();
const CStudent StudentA( 1 , (char * ) "xiaobai" , 90 );
/ / StudentA - >ShowStudent(); 不行
cout << "ID=" << StudentA.GetID() << endl;
CStudent * pStudent = new CStudent( 2 , (char * ) "xiaoxin" , 90 );
pStudent - >ShowStudent();
cout << "GetTotal=" << StudentA.GetTotal() << endl;
delete pStudent;
cout << "GetTotal=" << StudentA.GetTotal() << endl;
return 0 ;
} |
this 指针
this 是C++中的一个关键字,是一个const 指针,它指向当前对象,通过它可以访问当前对象的所有成员。this 只能在成员函数内部使用,用在其他地方没有意义,也是非法的。只有当对象被创建后this 才有意义,因此不能在static 成员函数中使用。
this 实际上是成员函数的一个形参,类的对象调用成员函数时,默认传入this 指针,指向调用函数的对象的首地址。不过this 这个形参是隐式的,this 指针会通过ecx寄存器传入,这种调用约定叫做thiscall 调用约定。
静态成员变量
1、静态成员变量是一种特殊的成员变量,它被关键字static 修饰。使用静态成员变量可以实现多个对象共享同一数据。
2、静态成员变量属于类,不属于某个具体的对象,即使创建多个对象,也只为静态成员变量分配一份内存,所有对象使用的都是这份内存中的数据。当某个对象修改了它的值,也会影响到其他对象。
3、静态成员变量必须初始化,而且只能在类体外进行。
4、静态成员变量的内存既不是在声明类时分配,也不是在创建对象时分配,而是在类外初始化时分配。同时,静态成员变量不占用对象的内存,而是在内存分区中的全局数据区分配内存,因此即使不创建对象也可以访问。
5、静态成员变量和普通静态变量一样,在内存分区中的全局数据区分配内存,生命周期到程序结束时才释放。
静态成员函数
静态成员函数的主要目的是访问静态成员。编译器在编译一个普通成员函数时,会隐式地增加一个形参this,并把当前对象的地址赋值给this,所以普通成员函数只能在创建对象后通过对象来调用,因为它需要当前对象的地址。而静态成员函数,编译器不会为它增加形参this,不需要当前对象的地址也可以通过类来直接调用。
- 普通成员函数有this 指针,可以访问类中的任意成员。
- 静态成员函数没有this 指针,只能访问静态成员(包括静态成员变量和静态成员函数)。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
赞赏
- [分享]C++基础十七-异常机制 8661
- [分享]C++基础十六-模板 9023
- [分享]C++基础十五-运算符重载 9044
- [分享]C++基础十四-抽象类 8739
- [分享]C++基础十三-多态 8553