隐藏的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指针与成员函数相关推荐

  1. 【C++深度剖析教程14】经典问题解析三之关于赋值的疑问

    今天我们来总结一下,之前所学C++中所遇到的一些经典的问题. 第一个疑问是: -什么时候需要重载赋值操作符 -编译器是否提供默认的赋值操作? 解答: *编译器为每个类默认重载了赋值操作符 *默认的赋值 ...

  2. 【C++深度剖析教程15】经典问题解析之关于string的疑问

    今天来看一下在面试笔试中经常会出错的地方. 我们先来看一个代码: #include <iostream> #include <string>using namespace st ...

  3. 【C++深度剖析教程39】实现C++数组类模板

    上一篇文章在那个学习了多参数类模板与特化的分析:点击链接查看上一篇文章:类模板深度剖析 本篇文章学习记录: 数值型模板参数 实现C++数组类模板 1.模板中的数值型参数 模板参数可以是数值型参数.也就 ...

  4. 【C++深度剖析教程7】C++之类中的函数重载

    函数重载的回顾(接上一篇文章): 函数重载的本质为相互独立的不同的函数 C++中通过函数名和函数参数确定函数调用 无法直接通过函数名得到重载函数的入口地址 函数重载必然发生在同一个作用域中 类中的成员 ...

  5. 【C++深度剖析教程1】C++中的经典问题解析-c++中的对象的构造顺序与析构顺序

    c++中的对象的构造顺序与析构顺序 问题一 当程序中存在多个对象时,如何确定这些对象的析构顺序? 一.单个函数创建时构造函数的调用顺序 1.调用父类的构造过程 2.调用成员变量的构造函数(调用顺序与声 ...

  6. 【C++深度剖析教程38】类模板深度剖析

    加qq1126137994 微信:liu1126137994 一起学习更多技术!!! 1.多参数类模板 类模板可以定义任意多个不同的类型参数 类模板可以被特化: 指定类模板的特定实现 部分类型参数必须 ...

  7. 【C++深度剖析教程25】继承中的构造与析构

    今天来学习C++中继承的构造与析构,有兴趣一起学习的加qq:1126137994 1.问题 如何初始化父类成员?父类构造函数与子类构造函数有什么关系? 子类对象是如何构造的? 子类中可以定义构造函数 ...

  8. 【C++深度剖析教程9】初探C++标准库

    在这之前,我写的C++程序不能叫做标准的C++程序,因为里面写的大多数还带有C语言的影子.今天我们来学习C++标准库. 首先看一下例子:操作符<<的原生意义是按位左移.那么我们重载这个操作 ...

  9. 【C++深度剖析教程40】使用数值型模板技术计算1+2+3+...+N的值

    上一篇文章学习了数值型模板技术,并利用相关技术,实现了C++的数组类模板.点击文章查看上一篇文章:点击链接查看 本篇文章,继续利用模板技术来解决一个问题. 如果想求1+2+3+-+N的结果,有很多种方 ...

最新文章

  1. 用php生成html文件,怎样用PHP生成html文件
  2. Pytorch之CNN:基于Pytorch框架实现经典卷积神经网络的算法(LeNet、AlexNet、VGG、NIN、GoogleNet、ResNet)——从代码认知CNN经典架构
  3. t test formula
  4. oracle := 和=,oracle a:=100 和 b=:c 区别
  5. 可穿戴在线展持续升温:聚焦产业热点 畅谈核心技术发展
  6. 小程序 php转excel,做微信小程序上传数据 数据格式?-微信 上传数据 生成excle
  7. Web前端—— JQuery迷你版实现以及使用
  8. 内存泄漏的原因及解决办法_内存泄漏的场景和解决办法
  9. deepin linux 命令行_5 个面向新手的 Linux 发行版
  10. [技术博客]使用wx.downloadfile将图片下载到本地临时存储
  11. 如何看懂常用原理图符号、如何阅读原理图
  12. codeforces 1436E Complicated Computations
  13. 1031 Hello World for U
  14. 刘彬20000词汇10
  15. Codeforces #467 (Div. 2) B. Vile Grasshoppers 蚂蚱的题目
  16. 关于导出文件中文名乱码问题,response.setHeader(),postman测试有误,直接用浏览器测试
  17. 中国计算机学会推荐国际期刊和会议2011
  18. proteus——555 PWM 发生器
  19. 视图的定义,修改,删除,更新,以及定义视图的好处。
  20. c++ 转bcd码_BCD码、十六进制与十进制互转

热门文章

  1. 数字图像处理系统组成 及研究内容
  2. html:(28):后代选择器和通用选择器
  3. windows下python安装
  4. zabbix入门之添加主机
  5. 使用Tomcat部署应用
  6. Spring-boot(一)
  7. Windows7+VS2012下OpenGL 4的环境配置
  8. 浅谈城市规划在移动GIS方面的应用发展
  9. Mplayer 音频解码分析
  10. BeanUtil使用例子:解析并转化HttpServletRequest到Bean的全面测试