欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > c/c++ >内容正文

c/c++

【C++深度剖析教程2】C++经典问题解析之二 this指针与成员函数

发布时间:2023/12/10 c/c++ 38 豆豆
生活随笔 收集整理的这篇文章主要介绍了 【C++深度剖析教程2】C++经典问题解析之二 this指针与成员函数 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

隐藏的this指针,所有对象共享类的成员函数

写一篇博客花费时间虽然长,但是却让你对内容的记忆尤为深刻,尤其是你对它的态度。记录菜鸟的成长日记,也希望同为菜鸟的你们与我一起共同进步!!现在分享的是C++的学习笔记,后面会同时分享数据结构学习笔记,以及我目前手中项目的制作流程!!忘记说了,目前手中正在做的是 基于Imx6的一个linux操作系统的移植,主要做驱动的移植与系统的移植,后期可能会移植QT,这些我都希望记录在我的博客中,相信几年后,我也有可能会成为了博客专家了呢?哈哈哈!!!

好,今天的主题依然接着上一篇博客的线路,来探讨一下目前我所学到的C++中的一些经典问题的 探讨!
1.成员函数和成员变量都是隶属于具体的对象么?
从面相对象的角度

  • 对象由属性(成员变量)和方法(成员函数)构成

从程序运行角度

  • 对象由数据和函数构成
    *数据可以位于栈,堆和全局数据区
    *函数只能位于代码段

直接上代码吧,文字的描述总是很枯燥!!!

#include <stdio.h>class Test {int mi; public:int mj;Test(int i);Test(const Test& t);int getMi();void print(); };Test::Test(int i) {mi = i; }Test::Test(const Test& t) {mi = t.mi; //mi 为private 类型,为何可以调用? }int Test::getMi() {return mi; }void Test::print() {printf("this = %p\n", this); }int main() {Test t1(1);Test t2(2);Test t3(3);printf("t1.getMi() = %d\n", t1.getMi());printf("&t1 = %p\n", &t1);t1.print();printf("t2.getMi() = %d\n", t2.getMi());printf("&t2 = %p\n", &t2);t2.print();printf("t3.getMi() = %d\n", t3.getMi());printf("&t3 = %p\n", &t3);t3.print();return 0; }

先运行一下,我还是将它放到linux中运行,输出结果为:

t1.getMi() = 1 &t1 = 0xbfcc3d68 this = 0xbfcc3d68 t2.getMi() = 2 &t2 = 0xbfcc3d60 this = 0xbfcc3d60 t3.getMi() = 3 &t3 = 0xbfcc3d58 this = 0xbfcc3d58

以上输出可以看出每一个对象以及this所指的地址都是一样的,这说明了一些问题:
可以得出一下四条结论:
-每一个对象拥有自己独立的属性(成员变量)(学了虚拟内存部分不之后,这些概念变的很清晰)
-所有的对象共享类的方法(成员函数)
-方法能够直接访问对象的属性
-方法中的隐藏参数 this 指针用于指代当前对象

程序中的问题mi = t.mi; //mi 为private 类型,为何可以调用?,因为拷贝构造函数Test::Test(const Test& t)本身也属于一种成员函数,能够直接访问对象的属性。

总结

以上是生活随笔为你收集整理的【C++深度剖析教程2】C++经典问题解析之二 this指针与成员函数的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。