C++类和对象之this指针

您所在的位置:网站首页 c语言如何定义函数指针 C++类和对象之this指针

C++类和对象之this指针

2023-06-10 10:36| 来源: 网络整理| 查看: 265

文章目录

1. this指针的引出

2.  this指针的特性

3. C语言和C++实现Stack的对比

1. this指针的引出

        我们先定义一个日期类:

class Date { public: void Init(int year, int month, int day) { _year = year; _month = month; _day = day; } void Print() { cout size == ps->capacity) { int newcapacity = ps->capacity * 2; DataType* temp = (DataType*)realloc(ps->array, newcapacity * sizeof(DataType)); if (temp == NULL) { perror("realloc申请空间失败!!!"); return; } ps->array = temp; ps->capacity = newcapacity; } } void StackPush(Stack* ps, DataType data) { assert(ps); CheckCapacity(ps); ps->array[ps->size] = data; ps->size++; } int StackEmpty(Stack* ps) { assert(ps); return 0 == ps->size; } void StackPop(Stack* ps) { if (StackEmpty(ps)) return; ps->size--; } DataType StackTop(Stack* ps) { assert(!StackEmpty(ps)); return ps->array[ps->size - 1]; } int StackSize(Stack* ps) { assert(ps); return ps->size; } int main() { Stack s; StackInit(&s); StackPush(&s, 1); StackPush(&s, 2); StackPush(&s, 3); StackPush(&s, 4); printf("%d\n", StackTop(&s)); printf("%d\n", StackSize(&s)); StackPop(&s); StackPop(&s); printf("%d\n", StackTop(&s)); printf("%d\n", StackSize(&s)); StackDestroy(&s); return 0; }

 可以看到,在用C语言实现时,Stack相关操作函数有以下共性:

每个函数的第一个参数都是Stack*函数中必须要对第一个参数检测,因为该参数可能会为NULL函数中都是通过Stack*参数操作栈的调用时必须传递Stack结构体变量的地址

结构体中只能定义存放数据的结构,操作数据的方法不能放在结构体中,即数据和操作数据的方式是分离开的,而且是线上相对复杂一点,涉及到大量指针操作,稍不注意就可能会出现错误。

2. C++实现

typedef int DataType; class Stack { public: void Init() { _array = (DataType*)malloc(sizeof(DataType) * 3); if (NULL == _array) { perror("malloc申请空间失败!!!"); return; } _capacity = 3; _size = 0; } void Push(DataType data) { CheckCapacity(); _array[_size] = data; _size++; } void Pop() { if (Empty()) return; _size--; } DataType Top() { return _array[_size - 1]; } int Empty() { return 0 == _size; } int Size() { return _size; } void Destroy() { if (_array) { free(_array); _array = NULL; _capacity = 0; _size = 0; } } private: void CheckCapacity() { if (_size == _capacity) { int newcapacity = _capacity * 2; DataType* temp = (DataType*)realloc(_array, newcapacity * sizeof(DataType)); if (temp == NULL) { perror("realloc申请空间失败!!!"); return; } _array = temp; _capacity = newcapacity; } } private: DataType* _array; int _capacity; int _size; }; int main() { Stack s; s.Init(); s.Push(1); s.Push(2); s.Push(3); s.Push(4); printf("%d\n", s.Top()); printf("%d\n", s.Size()); s.Pop(); s.Pop(); printf("%d\n", s.Top()); printf("%d\n", s.Size()); s.Destroy(); return 0; }

 C++中通过类可以将数据以及操作数据的方法进行完美结合,通过访问权限可以控制那些方法在类外可以被调用,即封装,在使用时就像使用自己的成员一样,更符合人类对一件事物的认知。而且每个方法不需要传递Stack*参数了,编译器编译之后该参数会自动还原,即C++中Stack*参数是编译器维护的,C语言中需要用户自己维护。

以上就是C++中this指针的全部内容,如有遗漏或是其他问题,还请各位大佬同行斧正,感谢各位支持!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3