ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

C++:this指针以及C与C++分别实现Stack的区别

C++:this指针以及C与C++分别实现Stack的区别 1.this 指针成员函数为什么知道自己操作的是谁首先看下面一段代码Date d1; Date d2; d1.Print(); d2.Print();问题来了。Print()只有一份代码。那么调用d1.Print();时它怎么知道自己应该打印d1调用d2.Print();时又怎么知道应该操作d2答案就是this指针文件将成员函数在概念上解释成类似void Init(Date* const this, int year, int month, int day);虽然我们自己不能把this显式写到形参中但是编译器会隐式处理。于是_year year;本质上可以理解成this-_year year;比如Date d1; d1.Init(2026, 9, 26);可以帮助理解成把 d1 的地址交给 Init this → d1因此函数里面this-_year就是d1._year如果Date d2; d2.Init(...);那this → d22.this 本质上解决了一个什么问题可以把前面的内容串起来。三个对象Date d1; Date d2; Date d3;共享同一套成员函数代码。但是每次调用的时候d1.Print() → this 指向 d1 d2.Print() → this 指向 d2 d3.Print() → this 指向 d3所以成员函数共享成员数据独立而 this 指针负责把函数和当前操作对象联系起来。3.为什么 C 的 Stack 看起来比 C 更“面向对象”C 语言通常是Stack st; Init(st); Push(st, 10); Destroy(st);你需要不断把st传给函数。而 C 可以变成Stack st; st.Init(); st.Push(10); st.Destroy();为什么不需要Push(st, 10);因为this已经隐式把当前对象传过去了。同时 C 还把数据和对应操作放进同一个类通过访问限定符限制外部随意修改内部数据。文件把这看作封装带来的重要变化。所以 C 的变化不仅是语法变好看了更重要的是数据 操作数据的方法被组织成了一个整体
返回列表